我不想寻求帮助,但是这次我完全陷入了xpath查询的困境。
请看一下这个XML:
<doc>
<car>
<property id="color">
<attribute id="black" />
<attribute id="white" />
<attribute id="green" />
</property>
<property id="size">
<attribute id="small" />
<attribute id="medium" />
<attribute id="large" />
</property>
</car>
<attributes>
<color>white</color>
<size>small</size>
</attributes>
</doc>
应当根据属性节点名输出汽车/属性。所需的输出是:
<property id="color"><attribute id="white" /></property>
<property id="size"><attribute id="small" /></property>
xpath
/doc/car/property[@id=name(/doc/attributes/*)]/attribute[@id=/doc/attributes/*/text()]
仅返回第一个节点,因为name()函数仅返回第一个元素的名称。
谁可以帮助我找出有效的xpath(XSLT 1.0)?非常感谢您的提前帮助!
您可以使用XSLT-1.0实现此目的,但不仅可以使用XPath-1.0实现,因为在XPath-1.0中您只能返回第一项。在XSLT-1.0中这不是问题,因为您可以使用xsl:for-each
循环,如下所示:
<xsl:for-each select="/doc/attributes/*">
<property id="{/doc/car/property[@id=current()/local-name()]/@id}"><attribute id="{/doc/car/property[@id=current()/local-name()]/attribute[@id=current()/.]/@id}" /></property>
</xsl:for-each>
此代码发出以下XML:
<property id="color"><attribute id="white"/></property>
<property id="size"><attribute id="small"/></property>
可以看出,您的需求似乎有点多余,但是我想您的更大场景证明了这种方法的合理性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句