Xml 在XSLT中,如何根据另一个子节点的值显示子节点的值
我试图使用XSLT将一个XML文档转换为另一个XML文档 原始XML的格式如下所示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
<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”。