使用DOM加载和loadXML时出错

时间:2011-06-22 06:52:56

标签: php xml xslt load xslt-1.0

我正在尝试加载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>

1 个答案:

答案 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

另见Understanding the node-set() Function