【发布时间】:2018-07-18 23:29:35
【问题描述】:
我一直在尝试解决 XSLT 中的一个问题,即到达特定父节点的子节点,而不管该父节点中的顺序如何。
假设我们有一个 xml 文件:
<book>
<id>
<type>
<name name="something">
--SomeText
</name>
</type>
<id>
</book>
<book>
<name name="something">
<name>
<id>
--SomeNodes--
</id>
<number>
</number>
</book>
这里的想法是我有很多这样的节点集,每个节点都有不同的<name> 节点顺序。
我想要的是,不管这个顺序,每次和book节点匹配,我应该都能得到<name>节点的值。
XSLT:
<xsl:template match="book">
<xsl:param name="rule" select="//name[1]>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
<xsl:if test=name/@name>
<xsl:comment><xsl:value-of select="concat('some text', substring($rule,2,4))"/>
</xsl:if>
</xsl:template>
所以,显然我用这种方法得到了节点的所有结果,因为“//”。
如果我将其更改为不带“//”的名称[1],那么它只会在书之后找到第一个名称元素,而不会找到其他元素。
每次当我匹配和完全相同的节点值时如何递归获取并将其值写为模板后的注释。
注意:我给你的例子是 XML,但我是从 XSLT-XSLT 转换的。
【问题讨论】:
-
如果您输入的 XML 格式正确,我们的生活会更轻松。这不是一个轻率的评论:我实际上不知道您输入中的结束标签应该在哪里。
-
我在匹配
节点时成功了,但我想通过 节点来完成。所以我认为 也可以有所帮助,我尝试了一点但没有成功。