我正在尝试遍历 Docbook 部分节点。它们的结构如下:
<sect1>
<sect2>
<sect3>
<sect4>
<sect5>
</sect5>
</sect4>
</sect3>
</sect2>
</sect1>
所以 sect1 中只有 sect2,sect2 中只有 sect3,依此类推。我们也可以在一个节点内有多个子节点;例如一个 sect1 中的多个 sect2。
我会以编程方式递归地遍历它们,使用一个计数器来跟踪循环所在的部分。
这次我必须使用 XSLT 并循环遍历它。因此,在 XSLT 中是否有等效或更好的方法来执行此操作?
编辑:我已经有了 Willie 建议的类似代码,我在其中指定了每个教派节点(sect1 到 sect5)。我正在寻找解决方案,它循环自行确定教派节点,而我不必重复代码。我知道 Docbook 规范只允许最多 5 个嵌套节点。
最佳答案
如果您对所有 sect{x} 节点执行相同的处理,而不管 {x},正如您在其中一条评论中所说,那么以下内容就足够了:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match=
"sect1|sect2|sect3|sect4|sect5">
<!-- Some processing here -->
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
如果您确实需要以相同的方式处理更多具有“sect”{x} 形式的不同名称的元素(假设 x 在 [1, 100] 范围内),则可以使用以下内容:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match=
"*[starts-with(name(), 'sect')
and
substring-after(name(), 'sect') >= 1
and
not(substring-after(name(), 'sect') > 101)
]">
<!-- Some processing here -->
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
关于xml - 如何通过分层节点与 XSLT 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/656871/