我可以使用哪种语言来组合多个XML文件。多个10个以上的文件。
PHP,java还是什么?
我尝试使用XSLT,但我不知道是否需要像Saxon这样的“处理器”。
由于我不知道从哪里开始,文档会让人感到困惑。
总而言之,我需要有人指出我正确的方向。
有人请帮忙。我一直试图解决这个问题
<xml version="1.0">
<products>
<price>Price List Here</price>
<model>Model Number Here</model>
</product>
答案 0 :(得分:7)
这可以在纯XSLT中轻松完成:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pdoc1Url" select="'doc1.xml'"/>
<xsl:param name="pdoc2Url" select="'doc2.xml'"/>
<xsl:template match="/">
<documents>
<xsl:copy-of select="document($pdoc1Url)"/>
<xsl:copy-of select="document($pdoc2Url)"/>
</documents>
</xsl:template>
</xsl:stylesheet>
上面的代码处理两个XML文档,但可以扩展以处理任何已知的XML文档。
解释:
将XML文档的URL作为全局/外部参数传递给转换。
使用标准XSLT函数 document()
。
答案 1 :(得分:2)
您可以使用任何允许您直接操作xml的语言。我建议用DOM而不是SAX找东西。如果你使用SAX,你必须自己基本遍历xml - 根据我的经验,这是一个皮塔饼。 DOM允许您以更多OOP方式对xml执行操作。
立即想到的东西就是xml“文档”周围的包装xml。
类似于:
<documents>
<document>
<!-- Your xml here -->
</document>
<document>
<!-- Your xml here -->
</document>
<document>
<!-- Your xml here -->
</document>
</documents>
伪代码将是: 创建文档根目录。 添加一个名为documents的元素,将其用作root。 迭代每个xml文件。 对于每个文件,创建一个名为document的新元素。将该元素添加到父元素。从文件加载xml。将该节点导入外部文档。将导入的节点附加到文档元素子集合中。
修改强> 正如这里所承诺的那样,已经过测试的更新代码,我知道有效:
<?php
// Replace the strings below with the actual filenames, add or decrease as fit
$filenames = array(0 => "test.xml", 1 => "test2.xml", 2 => "test3.xml" );
$docList = new DOMDocument();
$root = $docList->createElement('documents');
$docList->appendChild($root);
foreach($filenames as $filename) {
$doc = new DOMDocument();
$doc->load($filename);
$xmlString = $doc->saveXML($doc->documentElement);
$xpath = new DOMXPath($doc);
$query = "//product"; // this is the name of the ROOT element
$nodelist = $xpath->evaluate($query, $doc->documentElement);
if( $nodelist->length > 0 ) {
$node = $docList->importNode($nodelist->item(0), true);
$xmldownload = $docList->createElement('document');
$xmldownload->setAttribute("filename", $filename);
$xmldownload->appendChild($node);
$root->appendChild($xmldownload);
}
}
echo $docList->saveXML();
?>