如何获得单个子节点?
<root>
<p><span>text</span><span>text</span><span>text</span></p>
<p><span>text</span></p>
<p><span>text</span><span>text</span><span>text</span></p>
<p><span>text</span></p>
</root>
例如:/root/p/span
我可以获得所有span
标签,我可以找到第一个孩子或最后一个孩子或孩子,但我需要随机找到一个孩子。如何通过XML路径获取para标签?
答案 0 :(得分:1)
根据您的说明,如果p
元素只包含一个span
元素,则可以选择这些元素。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="p[count(span)=1]">
<xsl:copy>
<xsl:copy-of select="*|text()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*"/>
</xsl:stylesheet>
输入我使用过的XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<p>
<span>wrong</span>
<span>wrong</span>
<span>wrong</span>
</p>
<p>
<span>right</span>
</p>
<p>
<span>wrong</span>
<span>wrong</span>
<span>wrong</span>
</p>
<p>
<span>right</span>
</p>
</root>
输出 XML:
<?xml version="1.0" encoding="UTF-8"?>
<p>
<span>right</span>
</p>
<p>
<span>right</span>
</p>
答案 1 :(得分:0)
随机选择项目不是标准XSLT的一部分,因为它是一种功能语言。换句话说,无论您尝试多少次,都可以保证您在给定输入时获得相同的输出。
但是,如果随机性对您很重要,请使用XSLT扩展。这里建议回答:
Dimitre的库引用可能正是您所需要的。请注意,随机分配的前提条件是随机数,因此这是讨论的重点。