Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多个xml组合成一个_Php_Xml_Arrays_Parsing_Xml Parsing - Fatal编程技术网

Php 将多个xml组合成一个

Php 将多个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

您好,我正在将一个xml提要解析为一个数组,这对我来说很好,但到目前为止,我只有一个xml提要,但现在我有点被卡住了,因为我需要将多个xml组合成一个数组,然后将整个xml解析为一个数组。在这里,我提供了一些实际需要的示例代码

XML1

<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数据。我得到了我以前评论的解决方案。