可扩展标记语言(XML)是一种灵活的结构化文档格式,用于定义人类和机器可读的编码规则。
我目前正在使用不同的 UML/SysML 模型,并将其导出到 xml 文件中。我在文档中有不同的对象和关系,我想用 python 对它们进行聚类。哪个是
这是输入 XML: A47422 A47423 这是输入 XML: <deliveryStatusRequest> <Partner> <partyRoleId>A47422</partyRoleId> <Banner> <partyRoleId>A47423</partyRoleId> <POS> <partyRoleId>A47424</partyRoleId> </POS> <POS> <partyRoleId>A47425</partyRoleId> </POS> </Banner> <Banner> <partyRoleId>A47426</partyRoleId> <POS> <partyRoleId>A47428</partyRoleId> </POS> </Banner> </Partner> <ProcessData> <Partner> <returnCode>00</returnCode> <returnDescription>123456789</returnDescription> <Banner> <returnCode>00</returnCode> <returnDescription>234567890</returnDescription> <POS> <returnCode>01</returnCode> <returnDescription>Some error</returnDescription> </POS> <POS> <returnCode>00</returnCode> <returnDescription>456789012</returnDescription> </POS> </Banner> <Banner> <returnCode>00</returnCode> <returnDescription>567890123</returnDescription> <POS> <returnCode>02</returnCode> <returnDescription>Some Error</returnDescription> </POS> </Banner> </Partner> </ProcessData> </deliveryStatusRequest> 这是预期的输出: <SiebelMessage MessageType="Integration Object" IntObjectName="SFA Create Update Seller IO" IntObjectFormat="Siebel Hierarchical"> <ListOfSfaCreateUpdateSellerIo> <SfaSubAccountmasterBc> <CodiceSFA/> <!--Mapped to PartyRowId--> <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00--> <StatoSAP> <!--"Attivo" If returnCode is 00 --> <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"--> <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00--> <ListOfSfaSubaccountInsegnaBc> <SfaSubaccountInsegnaBc> <CodiceSFA/> <!--Mapped to PartyRowId--> <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00--> <StatoSAP> <!--"Attivo" If returnCode is 00 --> <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"--> <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00--> <ListOfSfaSubaccountPdvBc> <SfaSubaccountPdvBc> <CodiceSFA/> <!--Mapped to PartyRowId--> <CodiceSAP> <!--Mapped to returnDescription if returnCode is 00-- <StatoSAP> <!--"Attivo" If returnCode is 00 --> <StatoCommerciale> <!-- "Attivo" If returnCode is 00 else set to "Prospect"--> <DescrizioneRitornoSAP> <!--Mapped to returnDescription if returnCode is not 00--> </SfaSubaccountPdvBc> </ListOfSfaSubaccountPdvBc> </SfaSubaccountInsegnaBc> </ListOfSfaSubaccountInsegnaBc> </SfaSubAccountmasterBc> </ListOfSfaCreateUpdateSellerIo> </SiebelMessage> 我创建了 XSLT,但它不起作用: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="deliveryStatusRequest"> <SiebelMessage MessageType="Integration Object" IntObjectName="SFA Create Update Seller IO" IntObjectFormat="Siebel Hierarchical"> <ListOfSfaCreateUpdateSellerIo> <xsl:apply-templates select="Partner"/> </ListOfSfaCreateUpdateSellerIo> </SiebelMessage> </xsl:template> <xsl:template match="Partner"> <SfaSubAccountmasterBc> <CodiceSFA> <xsl:value-of select="partyRoleId"/> </CodiceSFA> <CodiceSAP> <xsl:choose> <xsl:when test="../ProcessData/Partner/returnCode = '00'"> <xsl:value-of select="../ProcessData/Partner/returnDescription"/> </xsl:when> </xsl:choose> </CodiceSAP> <StatoSAP>Attivo</StatoSAP> <StatoCommerciale>Attivo</StatoCommerciale> <DescrizioneRitornoSAP/> <ListOfSfaSubaccountInsegnaBc> <xsl:apply-templates select="Banner"/> </ListOfSfaSubaccountInsegnaBc> </SfaSubAccountmasterBc> </xsl:template> <xsl:template match="Banner"> <SfaSubaccountInsegnaBc> <CodiceSFA> <xsl:value-of select="partyRoleId"/> </CodiceSFA> <CodiceSAP> <xsl:choose> <xsl:when test="../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnCode = '00'"> <xsl:value-of select="../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnDescription"/> </xsl:when> </xsl:choose> </CodiceSAP> <StatoSAP>Attivo</StatoSAP> <StatoCommerciale>Attivo</StatoCommerciale> <DescrizioneRitornoSAP> <xsl:choose> <xsl:when test="../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnCode != '00'"> <xsl:value-of select="../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnDescription"/> </xsl:when> </xsl:choose> </DescrizioneRitornoSAP> <ListOfSfaSubaccountPdvBc> <xsl:apply-templates select="POS"/> </ListOfSfaSubaccountPdvBc> </SfaSubaccountInsegnaBc> </xsl:template> <xsl:template match="POS"> <SfaSubaccountPdvBc> <CodiceSFA> <xsl:value-of select="partyRoleId"/> </CodiceSFA> <CodiceSAP> <xsl:choose> <xsl:when test="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnCode = '00'"> <xsl:value-of select="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnDescription"/> </xsl:when> </xsl:choose> </CodiceSAP> <StatoSAP> <xsl:choose> <xsl:when test="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnCode = '00'">Attivo</xsl:when> </xsl:choose> </StatoSAP> <StatoCommerciale> <xsl:choose> <xsl:when test="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnCode = '00'">Attivo</xsl:when> <xsl:otherwise>Prospect</xsl:otherwise> </xsl:choose> </StatoCommerciale> <DescrizioneRitornoSAP> <xsl:choose> <xsl:when test="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnCode != '00'"> <xsl:value-of select="../../../../ProcessData/Partner/Banner[position() = count(../../preceding-sibling::Banner) + 1]/POS[position() = count(preceding-sibling::POS) + 1]/returnDescription"/> </xsl:when> </xsl:choose> </DescrizioneRitornoSAP> </SfaSubaccountPdvBc> </xsl:template> </xsl:stylesheet> 我得到这样的输出,codiceSAP 没有填充所有实体: <?xml version="1.0"?> <SiebelMessage MessageType="Integration Object" IntObjectName="SFA Create Update Seller IO" IntObjectFormat="Siebel Hierarchical"> <ListOfSfaCreateUpdateSellerIo> <SfaSubAccountmasterBc> <CodiceSFA>A47422</CodiceSFA> <CodiceSAP>123456789</CodiceSAP> <StatoSAP>Attivo</StatoSAP> <StatoCommerciale>Attivo</StatoCommerciale> <DescrizioneRitornoSAP/> <ListOfSfaSubaccountInsegnaBc> <SfaSubaccountInsegnaBc> <CodiceSFA>A47423</CodiceSFA> <CodiceSAP/> <StatoSAP>Attivo</StatoSAP> <StatoCommerciale>Attivo</StatoCommerciale> <DescrizioneRitornoSAP/> <ListOfSfaSubaccountPdvBc> <SfaSubaccountPdvBc> <CodiceSFA>A47424</CodiceSFA> <CodiceSAP/> <StatoSAP>Prospect</StatoSAP> <StatoCommerciale/> <DescrizioneRitornoSAP/> </SfaSubaccountPdvBc> <SfaSubaccountPdvBc> <CodiceSFA>A47425</CodiceSFA> <CodiceSAP/> <StatoSAP>Prospect</StatoSAP> <StatoCommerciale/> <DescrizioneRitornoSAP/> </SfaSubaccountPdvBc> </ListOfSfaSubaccountPdvBc> </SfaSubaccountInsegnaBc> <SfaSubaccountInsegnaBc> <CodiceSFA>A47426</CodiceSFA> <CodiceSAP/> <StatoSAP>Attivo</StatoSAP> <StatoCommerciale>Attivo</StatoCommerciale> <DescrizioneRitornoSAP/> <ListOfSfaSubaccountPdvBc> <SfaSubaccountPdvBc> <CodiceSFA>A47428</CodiceSFA> <CodiceSAP/> <StatoSAP>Prospect</StatoSAP> <StatoCommerciale/> <DescrizioneRitornoSAP/> </SfaSubaccountPdvBc> </ListOfSfaSubaccountPdvBc> </SfaSubaccountInsegnaBc> </ListOfSfaSubaccountInsegnaBc> </SfaSubAccountmasterBc> </ListOfSfaCreateUpdateSellerIo> </SiebelMessage> 逻辑是这样的: CodiceSAP for POS:如果 returnCode = '00',则填充 CodiceSAP。 POS 的 RitornoSAP 描述:仅当 returnCode != '00' 时才填充。 StatoSAP 和 StatoCommerciale for POS:当 returnCode = '00' 时设置为 Attivo;否则,默认“” (StatoSAP) 和“Prospect”(对于 StatoCommerciale)。 我认为您需要向上移动一级..才能填充CodiceSAP,例如 <xsl:template match="Banner"> <SfaSubaccountInsegnaBc> <CodiceSFA> <xsl:value-of select="partyRoleId"/> </CodiceSFA> <CodiceSAP> <xsl:choose> <xsl:when test="../../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnCode = '00'"> <xsl:value-of select="../../ProcessData/Partner/Banner[position() = count(preceding-sibling::Banner) + 1]/returnDescription"/> </xsl:when> </xsl:choose> </CodiceSAP>
我正在尝试在 PHP 中 ping(称为“ping”的 SEO 策略用于新内容,以使机器人更快地对其进行索引)Google。我唯一知道的是我需要将请求发送到以下网址: http://博客...
我想覆盖WPF中MenuItem的默认颜色,但我的方法似乎没有按预期工作。我想更改 MenuItem 的默认颜色,例如 MenuItem.Selected.Background、Menu...
Haskell:树上的箭头、XML 和 Hxt:将文本叶子转换为子树
背景 Freeplane 应用程序似乎已经消亡了数十年。我正在从中提取我的数据。 Freeplane 将数据存储为 XML。我采取的首要步骤之一就是统一该格式。
如何使用 Jackson Mapper 将 Map 字段序列化为 xml 属性
我有数据课 类数据项{ 私有字符串名称; 私有地图参数; // 获取器、设置器 } 我可以轻松地用杰克逊将其序列化,如下所示 ...
我有一个 .xml 文件,其中包含角色的信息。我正在尝试获取节点和属性的名称和值。我尝试过使用 XmlReader,但它不起作用,我也没有......
更新:我现在已经解决了我的主要问题,因此我将奖励对我的解决方案是否良好风格的良好审查。 最近我一直在尝试解析TMX文件,这些文件是描述...的XML文件
用以下代码 {-# 语言箭头#-} {-# LANGUAGE NoMonomorphismRestriction #-} 导入文本.XML.HXT.Core parseXml :: IOSArrow XmlTree XmlTree parseXml = getChildren >>> getChi...
我有一个在所有设备上都能很好地工作的应用程序,但我最近将目标 sdk 更新到了 api 35,现在我的应用程序的工具栏在 android api 35 中中断,并且在 ap 之前的所有其他设备上都能正常工作...
我想引用我在 XSLT 文件中定义的变量的更深 XML 级别。但是,当我尝试使用 XSLT 转换 XSD 时,它总是说我的样式表无效。只有当...
我正在尝试在 wso2 中消费后使用类中介器处理消息。但是,出现以下错误: 传输级别信息与 SOAP 消息命名空间 URI 不匹配 谁都可以吗
如何使用beautifulsoup提取XML标签下的文本内容研究设计
我有一个如下所示的 XML 文件: 研究设计 这是对童年急性病的二次分析 我有一个如下所示的 XML 文件: <sec id="sec2.1"> <title>Study design</title> <p id="p0055"> This is a secondary analysis of the Childhood Acute Illness and Nutrition (CHAIN) Network prospective cohort which, between November 2016 and January 2019, recruited 3101 children at nine hospitals in Africa and South Asia: Dhaka and Matlab Hospitals (Bangladesh), Banfora Referral Hospital (Burkina Faso), Kilifi County, Mbagathi County and Migori County Hospitals (Kenya), Queen Elizabeth Hospital (Malawi), Civil Hospital (Pakistan), and Mulago National Referral Hospital (Uganda). As described in the published study protocol, <xref rid="bib11" ref-type="bibr"> <sup>11</sup> </xref> children were followed throughout hospital admission and after discharge with follow-up visits at 45, 90 and 180-days post-discharge. Catchment settings differed in urbanisation, access to health care and prevalence of background comorbidities such as HIV and malaria. Prior to study start, sites were audited to optimise care as per national and World Health Organisation (WHO) guidelines. <xref rid="bib12" ref-type="bibr"> <sup>12</sup> </xref> Cross-network harmonisation of clinical definitions and methods was prioritised through staff training and the use of standard operation procedures and case report forms (available online, <ext-link ext-link-type="uri" xlink:href="https://chainnetwork.org/resources/" id="intref0010">https://chainnetwork.org/resources/</ext-link> ). </p> </sec> 如何使用 beatifulsoup 提取 <p id="p0055">元素中的文本? 用下面的代码解决这个问题似乎不起作用。 with open('test.xml', 'r') as file: soup = BeautifulSoup(file, 'xml') # Find and print all tags for tag in soup.find_all('sec'): print(tag.text) 非常感谢您的评论和帮助 您必须更具体地选择您的元素。 基于您的代码链.p到您的标签,始终获得所选<p>中的第一个<sec> for tag in soup.find_all('sec'): print(tag.p.get_text(strip=True))
我有一个包含一些数据的 XML 文件。该文件具有列和数据本身的描述。我可以读取列名称,但无法读取数据,因为我不明白如何指定该行名称...
我想将圆弧绘制为 Android XML 对象。我需要它是一个 xml,而不是一个 Drawable,我可以通过编程方式编码(这太简单了!),因为我需要它作为通知图标。 我知道如何编码
如何在 Node.js 中静默所有 XML DOM 的警告消息
我正在使用节点模块 xmldom。但是,它总是打印出大量警告和错误,如下所示: @#[行:484,列:1] [xmldom 警告] 属性“隐藏”错过了 quot(")...
SimpleXMLElement XML 在 CI3 升级到 CI4 后显示为纯文本
我正在将页面从 CI3 升级到 CI4。 该页面有一个按钮,用于打开显示 XML 数据的新选项卡。 由于某种原因,CI4 版本将 XML 显示为纯文本。 我复制了e的来源...
我有以下 XML 源: 我有以下 XML 来源: <?xml version="1.0"?> <report> <feature tag="Config"/> <feature tag="Runtime"> <feature tag="Metadata"> <property name="date" value="16.01.2025"/> <property name="time" value="09:31:34"/> </feature> <feature tag="Templates"> <feature tag="Template"> <property name="username" value="myself"/> <property name="password" value="something"/> <feature tag="Data sources"> <feature tag="Source"> <property name="name" value="modules"/> <property name="driver" value="eval"/> </feature> <feature tag="Source"> <property name="name" value="Artifact"/> <property name="driver" value="eval"/> </feature> <feature tag="Source"> <property name="name" value="Comments"/> <property name="driver" value="eval"/> </feature> </feature> </feature> </feature> </feature> </feature> </report> 我想修改 driver 属性的 value(位于功能标签 Source 下方),但前提是 name 属性的值(位于功能标签 Source 下方)等于单词“模块”。 我尝试使用以下函数仅提取特征标签Source。我认为可以在一个 LINQ 命令中按照我想要的方式修改属性,但我不知道如何在 XPath 中制定此 if 构造。 Private Function ModifyXml(ByVal xml As String) As Boolean Try Dim xdoc As New XDocument xdoc = XDocument.Parse(xml) Dim query As String = "/report/feature[@tag='Runtime']/feature[@tag='Templates']/feature[@tag='Template']/feature[@tag='Data sources']/feature[@tag='Source']" xdoc.XPathSelectElements(query).ToList() xdoc.Save("c:\temp\myFile.xml") Return True Catch ex As Exception Return False End Try End Function 结果应该是这样的: 我需要属性中的驱动程序名称作为值。该驱动程序名称取决于名称属性的值。 <?xml version="1.0"?> <report> <feature tag="Config"/> <feature tag="Runtime"> <feature tag="Metadata"> <property name="date" value="16.01.2025"/> <property name="time" value="09:31:34"/> </feature> <feature tag="Templates"> <feature tag="Template"> <property name="username" value="myself"/> <property name="password" value="something"/> <feature tag="Data sources"> <feature tag="Source"> <property name="name" value="modules"/> <property name="driver" value="somedriver1"/> </feature> <feature tag="Source"> <property name="name" value="Artifact"/> <property name="driver" value="somedriver2"/> </feature> <feature tag="Source"> <property name="name" value="Comments"/> <property name="driver" value="somedriver3"/> </feature> </feature> </feature> </feature> </feature> </feature> </report> XPath 查询,它不会修改。顾名思义, XPathSelectElements 返回所需的节点。你必须处理 其中每一个并修改正确的子元素。这 非常规的 XML 模式使这变得比需要的更加困难 -模板、来源、评论等都应该是元素,而不是通用属性中的值。当前格式无法获得灵活性。 LINQ也是一种查询,而不是一种修改语言,它不会修改。 无论您使用哪种语言,都必须迭代 他们产生的特征元素,并为每个元素检索名称或 驱动孩子并修改他们的值属性。 Panagiotis Kanavos 的评论
无法使用库加载 XML 文件:com.databricks.spark.xml
我正在尝试使用 databricks 加载 XML 文件。 我的环境在azure databricks上: 14.3 LTS(包括 Apache Spark 3.5.0、Scala 2.12) 这是我失败的代码: # 加载指定的...