Xml 在XSLT中,如何根据另一个子节点的值显示子节点的值

Xml 在XSLT中,如何根据另一个子节点的值显示子节点的值,xml,xslt,Xml,Xslt,我试图使用XSLT将一个XML文档转换为另一个XML文档 原始XML的格式如下所示 <NodeList> <Node> <Type>Commercial</Type> <ContactDetail> <Name>The Shop</Name> <Line01>1 The Lane</Line01> <Li

我试图使用XSLT将一个XML文档转换为另一个XML文档

原始XML的格式如下所示

<NodeList>
    <Node>
      <Type>Commercial</Type>
      <ContactDetail>
        <Name>The Shop</Name>
        <Line01>1 The Lane</Line01>
        <Line02></Line02>
        <Line03>London</Line03>
        <PostCode>SW11AA</PostCode>
        <TelMobile>07777123456</TelMobile>
      </ContactDetail>
    </Node>
    <Node>
      <Type>Municiple</Type>
      <ContactDetail>
        <Name>Some place</Name>
        <Line01>1 Hub Lane</Line01>
        <Line02>PLYMOUTH</Line02>
        <Line03>DEVON</Line03>
        <Line04></Line04>
        <PostCode>PL62BB<</PostCode>
        <TelMobile>01234567890</TelMobile>
      </ContactDetail>
    </Node>
<NodeList>

商业的
商店
1车道
伦敦
SW11AA
07777123456
市政厅
某处
1号中心巷
普利茅斯
德文郡

PL62BB正确的语法是
NodeList/Node[Type='Commercial']/ContactDetails/Name

正确的语法是
NodeList/Node[Type='Commercial']/ContactDetails/Name
您的思路是正确的。删除节点和条件之间的斜线。这样,您就可以选择与括号中的条件匹配的节点元素

NodeList/Node[Type=“Commercial”]/ContactDetail/Name


此外,情况是检查是否存在“商业性”,这将给您一个引号中的错误,xpath的结尾是查找ContactDetails,而不是ContactDetail,这就是您的示例中的情况。在上面的查询中,这两个问题都得到了纠正。

您的思路是正确的。删除节点和条件之间的斜线。这样,您就可以选择与括号中的条件匹配的节点元素

NodeList/Node[Type=“Commercial”]/ContactDetail/Name


此外,条件是检查“Commercial”,这将从引号中给您一个错误,xpath的结尾是查找ContactDetails,而不是ContactDetail,这是您的示例所具有的。这两个条件在上述查询中都已更正。

如果您需要访问重复的节点,您可以使用,例如:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:key name="nodeTypeKey" match="Node" use="Type" />

   <xsl:template match="/">
      <xsl:variable name="addressToUse" 
                    select="key('nodeTypeKey', 'Commercial')/ContactDetail">
      </xsl:variable>
      <Name><xsl:value-of select="$addressToUse/Name"/></Name>
      <Tel><xsl:value-of select="$addressToUse/TelMobile"/></Tel>
      <!-- etc -->
   </xsl:template>
</xsl:stylesheet>

如果需要访问重复节点,可以使用,例如:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

   <xsl:key name="nodeTypeKey" match="Node" use="Type" />

   <xsl:template match="/">
      <xsl:variable name="addressToUse" 
                    select="key('nodeTypeKey', 'Commercial')/ContactDetail">
      </xsl:variable>
      <Name><xsl:value-of select="$addressToUse/Name"/></Name>
      <Tel><xsl:value-of select="$addressToUse/TelMobile"/></Tel>
      <!-- etc -->
   </xsl:template>
</xsl:stylesheet>


谢谢你,这已经让我发疯太久了。在出现这种情况之前,我的额外斜杠只是问题中的一个输入错误,但我一直在输入“联系人详细信息”“错误地输入了代码。谢谢你,这已经让我发疯太久了。”。在出现这种情况之前,我用的额外斜杠只是问题中的一个输入错误,但我在代码中错误地输入了“ContactDetails”。