我正在尝试使用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
找到任何帮助将不胜感激!感谢。
答案 0 :(得分:0)
如果您可以在XMI.content上获得匹配,那么它不是“。”在Model_Management.Model中让你失望。
在我看来,由于您正在寻找6层向下的元素,因此可能有一个更简单的解决方案。你试过这个:
<xsl:template match="Foundation.Core.Namespace.ownedElement">
<!-- other code -->
</xsl:template>
模板标记中的匹配通常不必是特定的。您调用模板的select
中的<xsl:apply-templates>
应尽可能具体。