如何找到当前XSL文件所引用的XML文件

  • 本文关键字:文件 引用 XML XSL 何找 xml xslt
  • 更新时间 :
  • 英文 :


在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

最新更新