XML文件中的合并条目(PHP中的SimpleXML)

时间:2010-05-14 13:09:55

标签: php xml simplexml

我在我的XML文件中有这个:

<product name="iphone">
    <variant name="iphone" product_number="12345" price="500" picture="iphone.jpg">
        <description><![CDATA[iphone]]></description>
        <short_description><![CDATA[]]></short_description>
        <deliverytime><![CDATA[]]></deliverytime>
        <options>
            <option group="Color" option="Black" />
        </options>
    </variant>
</product>
<product name="iphone">
    <variant name="iphone" product_number="12345" price="500" picture="iphone.jpg">
        <description><![CDATA[iphone]]></description>
        <short_description><![CDATA[]]></short_description>
        <deliverytime><![CDATA[]]></deliverytime>
        <options>
            <option group="Color" option="White" />
        </options>
    </variant>
</product>

我想将它合并到这里(注意我合并了options标签):

<product name="iphone">
    <variant name="iphone" product_number="12345" price="500" picture="iphone.jpg">
        <description><![CDATA[iphone]]></description>
        <short_description><![CDATA[]]></short_description>
        <deliverytime><![CDATA[]]></deliverytime>
        <options>
            <option group="Color" option="Black" />
            <option group="Color" option="White" />
        </options>
    </variant>
</product>

最好我想在记忆中完成所有操作,因为我会在之后进一步处理。

1 个答案:

答案 0 :(得分:0)

这是不容易的,我正在寻找同样的...一个问题是想知道哪个iphone的意思等等。存在合并功能但在我的情况下它们并没有很好地工作:{{3当你找不到解决方案时,我认为是时候自己做了并报告你:

更新1:函数xml_attributeaddxmlelement来自普通的php页面(我复制到结尾)。我写的函数非常单独用于一个案例,并不适用于所有合并情况。我为我创作了一个小说。

XML:Neu(新添加)

<varrDaten>
        <person>
        <street id="adder">adder</street>
        <loc>land AAA</loc>
    </person>
    <person>
        <street id="exister">exister street</street>
        <loc>land gg</loc>
    </person>
    <person>
        <street id="updater">street is uptodate</street>
        <loc>land is updated</loc>
    </person>
</varrDaten>

<varrDaten> <person> <street id="adder">adder</street> <loc>land AAA</loc> </person> <person> <street id="exister">exister street</street> <loc>land gg</loc> </person> <person> <street id="updater">street is uptodate</street> <loc>land is updated</loc> </person> </varrDaten>

XML(存在)

<varrDaten>
    <person>
        <street id="minuser">minuser</street>
        <loc>land 0</loc>
    </person>
    <person>
        <street id="exister">exister street</street>
        <loc>land lon</loc>
    </person>
    <person>
        <street id="updater">update need street</street>
        <loc>land need update</loc>
    </person>
</varrDaten>

function simplexml_merge2($xpOld,$xpNeu)
            {
            $selIDS=$xpNeu->xpath('//street[not(@id="0")]');
            foreach($selIDS as $ident)
                {
                //existiert in vorhandennen?
                $xpSelV=$xpOld->xpath('//person/street[@id="'.xml_attribute($ident,'id').'"]');
                if(count($xpSelV)>0)
                    {
                    echo "YES EXISTS".(string)$xpSelV[0][0]."<>".(string)$ident[0]."
"; //test of value maybe.. if(!((string)$xpSelV[0][0]==(string)$ident[0])) { //HERE YOU CAN ADD CRITERIA WHICH SHOULD BE SYCNRONISED IF ALREADY EXISTS echo "VAL not the same"; $xp2Ef=$xpOld->xpath('//person[./street[@id="'.xml_attribute($ident,'id').'"]]'); $xp2Ef[0][0]=(string)$ident[0]; } } else { echo "NOOO:".$xpNeu[0]; $xpEF=$xpOld->xpath('//varrDaten'); echo '//person[./street[@id="'.xml_attribute($ident,'id').'"]]'; $xp2Ef=$xpNeu->xpath('//person[./street[@id="'.xml_attribute($ident,'id').'"]]'); AddXMLElement($xpEF[0],$xp2Ef[0]); } } }
添加。 FUNC <varrDaten> <person> <street id="minuser">minuser</street> <loc>land 0</loc> </person> <person> <street id="exister">exister street</street> <loc>land lon</loc> </person> <person> <street id="updater">update need street</street> <loc>land need update</loc> </person> </varrDaten>