我正在尝试使用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>
我需要能够打印NodeList / Node [Type ='Commercial']的详细联系方式,但就我而言,我找不到正确的方法。
我想到了一些事情;
<xsl:value-of select="NodeList/Node/[Type='Commercial"]/ContactDetails/Name" />
但当然“ContactDetails”不是“Type”的孩子。
有人能指出我正确的方向吗?
答案 0 :(得分:2)
正确的语法是NodeList/Node[Type='Commercial']/ContactDetails/Name
。
答案 1 :(得分:2)
你走在正确的轨道上。删除Node和您的条件之间的斜杠。这样您就可以选择与括号中的条件匹配的Node元素。
NodeList/Node[Type="Commercial"]/ContactDetail/Name
此外,条件是检查'商业',这将从引号中给你一个错误,并且xpath的结尾正在寻找ContactDetails而不是ContactDetail,这就是你的例子。这两个都被纠正了在上面的查询中。
答案 2 :(得分:0)
如果您需要访问重复的节点,可以使用xsl:key
,例如:
<?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>