我正在尝试加载XML文件但是我得到以下错误:我使用load('');或loadXML();我猜错误是在负载不在的地方,但我想不出可能是什么。我在这里缺少什么?
XSLT
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
version="1.0">
<xsl:template match="files">
<xsl:variable name="docs">
<docs>
<xsl:for-each select="file">
<xsl:copy-of select="document(.)"/>
</xsl:for-each>
</docs>
</xsl:variable>
<xsl:apply-templates select="msxsl:node-set($docs)"/>
</xsl:template>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="item">
<product>
<xsl:apply-templates select="node() | @*" />
</product>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
我的评论摘要(现已删除):
虽然我在示例代码中没有看到任何loadXML
,但第一条错误消息告诉您,您尝试加载的XML因其所说的内容而格式不正确。就像Yoshi指出的那样,当loadXML
需要XML字符串时,您可能会尝试加载URI。
第二条错误消息表示您在XPath选择表达式中使用了未知函数。 libxml / libxslt仅支持XPath 1.0。 msxsl:node-set($docs)
不是常规的xpath函数。它不受支持。
尝试不使用命名空间,例如只是node-set
。如果这不起作用,请在根元素中使用xmlns:exsl="http://exslt.org/common"
替换msxsl命名空间,然后尝试使用exsl:node-set
。