Php 将多个xml组合成一个
您好,我正在将一个xml提要解析为一个数组,这对我来说很好,但到目前为止,我只有一个xml提要,但现在我有点被卡住了,因为我需要将多个xml组合成一个数组,然后将整个xml解析为一个数组。在这里,我提供了一些实际需要的示例代码 XML1Php 将多个xml组合成一个,php,xml,arrays,parsing,xml-parsing,Php,Xml,Arrays,Parsing,Xml Parsing,您好,我正在将一个xml提要解析为一个数组,这对我来说很好,但到目前为止,我只有一个xml提要,但现在我有点被卡住了,因为我需要将多个xml组合成一个数组,然后将整个xml解析为一个数组。在这里,我提供了一些实际需要的示例代码 XML1 <JobRecords> <JobRecord> <Brand>Corporate1</Brand> <WorkTypes> <Wo
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
公司1
永久的
XML2
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
公司2
永久的2
XML3
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
公司3
永久的
组合我想要作为输出的XML
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
<JobRecords>
<JobRecord>
<Brand>Corporate1</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent1</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate2</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent2</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
<JobRecord>
<Brand>Corporate3</Brand>
<WorkTypes>
<WorkTypeRecord>
<Title>Permanent3</Title>
</WorkTypeRecord>
</WorkTypes>
</JobRecord>
</JobRecords>
公司1
永久的
公司2
永久的2
公司3
永久的
到目前为止,我已经尝试了下面的代码,这对我来说是可行的,但是生成combineoutput.xml需要花费太多的时间。那么,有没有其他更好的解决方案来实现这一点呢
function simplexml_merge(SimpleXMLElement &$xml1, SimpleXMLElement $xml2) {
// convert SimpleXML objects into DOM ones
$dom1 = new DomDocument('1.0', 'UTF-8');
$dom2 = new DomDocument('1.0', 'UTF-8');
$dom1->loadXML($xml1->asXML());
$dom2->loadXML($xml2->asXML());
// pull all child elements of second XML
$xpath = new domXPath($dom2);
$xpathQuery = $xpath->query('/*/*');
for ($i = 0; $i < $xpathQuery->length; $i++) {
// and pump them into first one
$dom1->documentElement->appendChild(
$dom1->importNode($xpathQuery->item($i), true));
}
$xml1 = simplexml_import_dom($dom1);
}
$xml1 = simplexml_load_file("xml1.xml", 'SimpleXMLElement', LIBXML_NOCDATA);
$xml2 = simplexml_load_file("xml2.xml", 'SimpleXMLElement', LIBXML_NOCDATA);
simplexml_merge($xml1, $xml2);
$xml1->asXml('output.xml');
函数simplexml\u merge(simplexmlement&$xml1,simplexmlement$xml2){
//将SimpleXML对象转换为DOM对象
$dom1=新的DomDocument('1.0','UTF-8');
$dom2=新的DomDocument('1.0','UTF-8');
$dom1->loadXML($xml1->asXML());
$dom2->loadXML($xml2->asXML());
//提取第二个XML的所有子元素
$xpath=newdomxpath($dom2);
$xpathQuery=$xpath->query('/*/*');
对于($i=0;$i<$xpathQuery->length;$i++){
//然后把它们注入第一个
$dom1->documentElement->appendChild(
$dom1->importNode($xpathQuery->item($i),true));
}
$xml1=simplexml\u import\u dom($dom1);
}
$xml1=simplexml\u load\u文件(“xml1.xml”,“simplexmlement”,LIBXML\u NOCDATA);
$xml2=simplexml\u load\u文件(“xml2.xml”,“simplexmlement”,LIBXML\u NOCDATA);
simplexml_合并($xml1,$xml2);
$xml1->asXml('output.xml');
请告诉我实现这一目标的最佳方法。提前感谢,非常感谢。只需使用DOM,而不是SimpleXML。我在这里将XML添加到数组中。在实际代码中,可能会使用文件名列表和DOMDocument::load(),而不是DOMDocument::loadXml()
嗨,Dh,好的开始!您可以查看
simplexml
或DOM
并尝试一些代码。如果您需要帮助,请编辑您的问题,展示您尝试过的内容,并明确指出您需要的内容。@michi我已经用我迄今为止尝试过的代码更新了我的问题,请注意这一点。您好,我如何将XML添加到数组中,因为我正在从该url加载提要url和XML数据。我得到了我以前评论的解决方案。