【问题标题】:Error on load and loadXML using DOM使用 DOM 加载和 loadXML 时出错
【发布时间】:2011-09-20 03:09:06
【问题描述】:

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

【问题讨论】:

  • 我认为您在这里混合了两件事:您为load 声明的错误显然是loadXml 错误,这可以理解为loadXml 期望xml 作为字符串,如果您在这里放一个文件路径你会得到那个错误。第二个似乎一切正常(加载时),但您的 xslt 文件中有错误。 (也请发布 xslt 文件)
  • @Yoshi @Gordon 我已经用我的 XSLT 更新了这个问题。
  • 可能只有我一个人,但$xslt = new DomDocument;不应该是$xslt = new DomDocument();吗?
  • @Nanne 不,如果不需要构造函数参数并且您不会传递可选参数,则留下() 是可以的。
  • @Yoshi:谢谢:)。我确实认为它的可读性较差,但这并不重要:)

标签: php xml xslt load xslt-1.0


【解决方案1】:

我的 cmets 总结(现已删除):

虽然我在您的示例代码中没有看到任何 loadXML,但第一条错误消息告诉您,您尝试加载的 XML 格式不正确,因为它所说的内容。就像 Yoshi 指出的那样,当 loadXML 需要 XML 字符串时,您可能会尝试加载 URI。

第二条错误消息暗示您在 XPath 选择表达式中使用了未知函数。 libxml/libxslt 仅支持 XPath 1.0。 msxsl:node-set($docs) 不是常规的 xpath 函数。不支持。

尝试不使用命名空间,例如只是node-set。如果这不起作用,请将根元素中的 msxsl 命名空间替换为 xmlns:exsl="http://exslt.org/common",然后尝试使用 exsl:node-set

另见Understanding the node-set() Function

【讨论】:

  • 我已经使用了你建议我的命名空间,它正在工作,谢谢!所以错误出现在我的 xslt 中。
猜你喜欢
  • 2018-07-04
  • 2022-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2011-08-03
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多