在XSL文件中,代码为:
<xsl:variable name="xyz" select="/this/is/a/path" />
指的是路径"0"/该/is/a/路径";。如何找到此路径的位置?
如果这个路径存在于另一个文件中,我如何找出是哪个文件?
感谢
EDIT(添加了一些上下文(
如果这是xml:的内容
<?xml version='1.0' encoding='UTF-8'?>
<!-- A comment -->
<?some-pi ?>
<this>
<is>
<a>
<path/>
</a>
</is>
</this>
此xsl:variable:
<xsl:variable name="xyz" select="/this/is/a/path" />
具有这样的XPath:/this/is/a/path
,它选择一组XML元素。在这种情况下,指向唯一为空的path
-元素的指针。
你可以像这个一样使用这个变量
<xsl:copy-of select="$xyz/ancestor::is"/>
哪个会给出这样的结果:
<is>
<a>
<path/>
</a>
</is>
如果您想从xml根目录中获取所有内容,可以使用:
<xsl:copy-of select="/"/>
哪个会给出这个结果:
<!-- A comment -->
<?some-pi ?>
<this>
<is>
<a>
<path/>
</a>
</is>
</this>
因此,在您的评论中回答您的问题:
"如果XPath从根开始,那么这个根到底在哪里">
这是在这个xml声明之后的一点:
<?xml version='1.0' encoding='UTF-8'?>
这是可选的
有关XPath的小介绍,请参阅此处
所以问题中的XPath与文件无关。它旨在选择xml文件中的一个元素
如何找到当前XSL文件所引用的XML文件
如果此路径存在于另一个文件中,如何查找该文件?
每个XSL转换都有一个源XML文档。此文档是由启动转换的应用程序指定的,而不是由样式表指定的。样式表中的所有XPath表达式都是相对于源XML文档的,除非使用document()
函数更改了上下文。
如果(看起来*(您使用的是XSLT1.0处理器,则无法将文件路径返回到源XML。但是,您可以使用调用应用程序将文件路径作为参数传递给样式表。在XSLT2.0及更高版本中,可以使用base-uri()
和/或document-uri()
函数。
--
(*(如果您是"不确定XSLT的版本";,请参阅此处如何查找:https://stackoverflow.com/a/25245033/3016153