无法加载巨大的XML文档(错误地认为它是由于XSLT处理)

时间:2010-05-01 19:07:14

标签: xml

我正在尝试使用XSLT匹配某些元素。我的输入文档非常大,在处理以下代码后无法加载源XML(特别考虑第一行)。

    <xsl:template match="XMI/XMI.content/Model_Management.Model/Foundation.Core.Namespace.ownedElement/Model_Management.Package/Foundation.Core.Namespace.ownedElement">
    <rdf:RDF>
        <rdf:Description rdf:about="">

            <xsl:for-each select="Foundation.Core.Class">       
                <xsl:for-each select="Foundation.Core.ModelElement.name">
                    <owl:Class rdf:ID="@Foundation.Core.ModelElement.name" />
                </xsl:for-each>
            </xsl:for-each>     

        </rdf:Description>
    </rdf:RDF>
</xsl:template>

显然,在“ Model_Management.Model ”之后无法加载XSLT。 PHP代码如下:

    if ($xml->loadXML($source_xml) == false) {
    die('Failed to load source XML: ' . $http_file);
}

然后无法执行loadXML并立即死亡。我认为现在有两种选择。

1)我应该设置一个最长执行时间。坦率地说,我不知道我是如何为内置的PHP 5 XSLT处理器做的。 2)考虑另一种匹配方式。

处理这个问题的最佳方法是什么?

输入文件可在http://krisvandenbergh.be/uml_pricing.xml

找到

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

如果您可以在XMI.content上获得匹配,那么它不是“。”在Model_Management.Model中让你失望。

在我看来,由于您正在寻找6层向下的元素,因此可能有一个更简单的解决方案。你试过这个:

<xsl:template match="Foundation.Core.Namespace.ownedElement">
    <!-- other code -->
</xsl:template>

模板标记中的匹配通常不必是特定的。您调用模板的select中的<xsl:apply-templates>应尽可能具体。