在XSLT中,有没有办法在处理元素时确定XML文档的位置?
示例:给出以下XML Doc Fragment …
<Doc> <Ele1> <Ele11> <Ele111> </Ele111> </Ele11> </Ele1> <Ele2> </Ele2> </Doc>
在XSLT中,如果我的上下文是元素“Ele111”,我如何让XSLT输出完整路径?我希望它输出:“/ Doc / Ele1 / Ele11 / Ele111”。
这个问题的上下文:我有一个非常大,非常深的文档,我想详尽地遍历(通常使用递归),如果我找到一个具有特定属性的元素,我想知道我在哪里找到它。我想我可以随身携带当前的路径,但我认为XSLT / XPath应该知道。
不要认为这是内置于XPath中的,你可能需要一个递归模板,比如我用这个例子的
here。它将遍历XML文档中的每个元素,并以类似于您所描述的样式输出该元素的路径。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/"> <paths> <xsl:apply-templates/> </paths> </xsl:template> <xsl:template match="//*"> <path> <xsl:for-each select="ancestor-or-self::*"> <xsl:call-template name="print-step"/> </xsl:for-each> </path> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template name="print-step"> <xsl:text>/</xsl:text> <xsl:value-of select="name()"/> <xsl:text>[</xsl:text> <xsl:value-of select="1+count(preceding-sibling::*)"/> <xsl:text>]</xsl:text> </xsl:template> </xsl:stylesheet>
有一些并发症;考虑这棵树:
<root> <child/> <child/> </root>
你如何区分这两个子节点?因此,您需要在item-sequence,child1和child [2]中添加一些索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。