XMLFILE girdileri birleştirme (PHP SimpleXML)

1 Cevap php

Benim XML dosyasında bu var:

<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>

(Ben seçenekleri etiketi birleştirme unutmayın) bu içine birleştirmek istiyorum:

<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>

Tercihen Ben daha sonra bunu işleyecek beri belleğinde tüm yapmak istiyorum.

1 Cevap

o kadar kolay değil ve ben aynı arıyorum ... bir sorun anlamına hangi iphone identicate olduğunu ve böylece .. fonksiyonlarını birleştirme duyulmaktadır ama benim durumumda çok iyi işe yaramadı: {[(0)] Henüz hiçbir çözüm bulunca} ben bunu kendim yapmak ve rapor etmek zamanı olduğunu düşünüyorum:

Update 1: fonksiyonlar xml_attribute ve addxmlelement, normal php sayfasından (ve ben sonuna kadar kopyalanan). I yazdı işlevi bir durum için çok ayrı ve tüm birleştirme durum için geçerli değildir. i benim için bir kurgu oluşturulur.

XML: Neu (new to add)

<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 (exists)

<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]); } } }
Add. func
function xml_attribute($object, $attribute)
{
    if(isset($object[$attribute]))
        return (string) $object[$attribute];
    else
        return false;
}
 function AddXMLElement(SimpleXMLElement $dest, SimpleXMLElement $source)
    {
        $new_dest = $dest->addChild($source->getName(), $source[0]);

    foreach ($source->attributes() as $name => $value)
    {
        $new_dest->addAttribute($name, $value);
    }

    foreach ($source->children() as $child)
    {
        AddXMLElement($new_dest, $child);
    }
}