Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT文档(';';)函数不';行不通_Xml_Xslt - Fatal编程技术网

Xml XSLT文档(';';)函数不';行不通

Xml XSLT文档(';';)函数不';行不通,xml,xslt,Xml,Xslt,正如我从文档中了解到的,参数为空字符串的XSLT函数document()应该读取当前XSLT文档。但以下代码不起作用: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <state>test2</state> <xsl:template match="/"> test1 <xsl:value-o

正如我从文档中了解到的,参数为空字符串的XSLT函数document()应该读取当前XSLT文档。但以下代码不起作用:

  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <state>test2</state>
   <xsl:template match="/">
      test1
      <xsl:value-of select="document('')/*/state"/>
    </xsl:template>
   </xsl:stylesheet>

测试2
测试1
当我将此XSLT应用于某些XML(仅举个例子)时,我只有“test1”作为输出。为什么要排队

 <xsl:value-of select="document('')/*/state"/>


不打印“test2”

您应该声明自己的命名空间,如下所示:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:my="http://localhost"
    exclude-result-prefixes="my">
    <xsl:output method="text"/>

    <my:state>test2</my:state>

    <xsl:template match="/">
        <xsl:text>test1</xsl:text>
        <xsl:value-of select="document('')/*/my:state"/>
    </xsl:template>
</xsl:stylesheet>
引用迈克尔·凯的话:

用户定义的顶级元素必须 也属于具有 非空URI,与XSLT不同 名称空间,最好是不同的名称空间 从任何 小贩。这些元素被忽略 XSLT处理器


document(“”)的定义是它读取其URI与包含document(“”)调用的样式表中指令的基本URI相同的XML文档。除非使用外部实体,否则这通常与样式表模块的基本URI相同。如果不起作用,这通常是因为样式表模块的基本URI未知。如果XSLT处理器得到内存中的样式表(例如字符串或DOM),而不是通过URI检索的资源,则很容易发生这种情况。例如,如果使用JAXP StreamSource而不调用setSystemId(),则基本URI将是未知的。

如何运行转换?对我来说很有用。在运行Eclipse XSL Transformer时,我同时获得了
test1
test2
。如果在Windows上使用MSXML库,可能需要启用文档函数:
styledocument.setProperty(“AllowDocumentFunction”,true)查看我使用的xalan是java 6的一部分,任何运行该样式表的尝试都会导致一些错误消息,如“xsl:stylesheet的子元素必须绑定到名称空间”在java 6中仍然不起作用(使用xalan)。但无论如何,感谢您,对于语法错误,使用过的XSL处理器版本似乎需要一些特殊的语法+1。此外,您可以引用以下内容:“此外,
xsl:stylesheet
元素可以包含任何不来自XSLT名称空间的元素,只要元素的扩展名称具有非空的名称空间URI。”+1回答得好。此外,在某些环境中,某些特权级别不允许使用
document()
函数。
test1test2