Слияние XML-документов с PHP - PullRequest
1 голос
/ 20 июля 2010

У меня есть два XML-документа:

XML 1:

<outer>
    <foo>
        <foo-child name="fA" special="true">
            content of fA
        </foo-child>
        <foo-child name="fB">
            content of fB
        </foo-child>
    </foo>
    <bar>
        <bar-child name="bA">
            content of bA
        </bar-child>
        <bar-child name="bB" special="true">
            content of bB
        </bar-child>
    </foo>
</outer>

XML 2:

<outer>
    <foo>
        <foo-child name="fA">
            newer and improved content of fA
        </foo-child>
        <foo-child name="fC">
            content of fC
        </foo-child>
    </foo>
    <bar>
        <bar-child name="bA" really-special="true" />
        <bar-child name="bB" special="false">
            Despecialized content of bB
        </bar-child>
    </foo>
</outer>

Я хочу объединить их так, чтобы элементы издокумент два элемента переопределения с тем же атрибутом name в документе один.Если во втором документе отсутствует атрибут или контент, он наследуется от первого.Итак:

Комбинированный

<outer>
    <foo>
        <foo-child name="fA" special="true">
            newer and improved content of fA
        </foo-child>
        <foo-child name="fB">
            content of fB
        </foo-child>
        <foo-child name="fC">
            content of fC
        </foo-child>
    </foo>
    <bar>
        <bar-child name="bA" really-special="true">
            content of bA
        </bar-child>
        <bar-child name="bB">
            Despecialized content of bB
        </bar-child>
    </foo>
</outer>

Я намереваюсь сделать это на стороне сервера с PHP.

Однако я не уверен, является ли это работой для DomDocument или SimpleXML.Я тоже на самом деле не использовал и продолжаю думать: «Хотел бы я иметь jQuery».

Есть ли простое решение этой проблемы?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2014

Ссылка сейчас в порядке.Я согласен с Sarfraz, и это хорошее решение для слияния XML-файлов с SImpleXML из комментария к странице справочника PHP , работающего также с атрибутами:

function append_simplexml(&$simplexml_to, &$simplexml_from)
{
    foreach ($simplexml_from->children() as $simplexml_child)
    {
        $simplexml_temp = $simplexml_to->addChild($simplexml_child->getName(), (string) $simplexml_child);
        foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
        {
            $simplexml_temp->addAttribute($attr_key, $attr_value);
        }

        append_simplexml($simplexml_temp, $simplexml_child);
    }
} 

Также есть пример использования.

0 голосов
/ 20 июля 2010

Переход с SimpleXML - правильный путь и, вероятно, более простой. Вот хороший урок о том, как его использовать:

Введение в SimpleXML с PHP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...