Создание нескольких атрибутов для элемента - PullRequest
2 голосов
/ 07 июля 2011

Я понял, как создать объект DOM для XML с помощью следующего кода (его часть):

$xml_item = $xml->createElement('item');
$xml_location = $xml->createElement('location');

$xml_item->setAttribute('item-id', 'abcd');
$xml_item->appendChild($xml_location);
$xml_location->setAttribute('location-id', '1234');
$xml_location->appendChild($xml_quantity);
$xml_quantity = $xml->createElement('quantity', '0');

Дает:

<item item-id="abcd">       
    <location location-id="1234">
        <quantity>0</quantity>             
    </location>
</item>

Я хочу продолжать добавлять элементы с различными атрибутами, чтобы получить что-то вроде этого:

<item item-id="abcd">       
    <location location-id="1234">
        <quantity>99</quantity>             
    </location>
</item>
<item item-id="qwer">       
    <location location-id="1234">
        <quantity>55</quantity>             
    </location>
</item>

Но мне трудно понять это. Как использовать одну и ту же переменную $ xml_item для создания нескольких записей элемента «item» с другим атрибутом, как указано выше (например, abcd и qwer)? Кажется, перезаписывается первый, когда я создаю другой $ xml_item-> setAttribute ('item-id', 'qwer') после создания "abcd".

Должен ли я создать несколько копий "$ xml_item" с разными именами переменных (например, $ xml_item1, _item2 и т. Д., Но это кажется неоправданно утомительным) или я могу каким-то образом повторно использовать одну и ту же переменную ($ xml_item) для создания нескольких записей ? Идея состоит в том, чтобы создать столько элементов «item», сколько мне нужно, с разными атрибутами.

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

Со страницы php.net для createElement ,

Этот узел не будет отображаться в документе, если он не вставлен с помощью (например) DOMNode-> appendChild ().

Так что просто добавляйте $xml_item к вашему объекту DomDocument между createElement() вызовами.
т.е.) $xml->appendChild($xml_item);

2 голосов
/ 07 июля 2011

Я думаю, что вам не хватает того, что $xml-item является ссылкой на объект - каждый вызов, который вы делаете для одной из его функций, вызывается для одного и того же экземпляра объекта, поэтому setAttribute будет переопределять любое значение, которое выустановить до.

Чтобы создать новый экземпляр объекта, вам нужно снова вызвать

$xml_item = $xml->createElement('item');

- один раз для каждого элемента , который вы хотите добавить.

Вы можете использовать одно и то же имя переменной - таким образом $xml-item будет ссылаться на другой новый экземпляр элемента 'item', и старый экземпляр больше не будет доступен (кроме родительского $xml).

Как уже упоминалось в brian_d, после каждого вызова createElement вам нужно будет вызывать

$xml->appendChild($xml_item);

, чтобы все элементы появлялись в родительском документе DOM.

0 голосов
/ 05 января 2016
$img = $doc->createElement( "img" );

  $imgattr = $doc->createAttribute( "src" );

  $imgattr1 = $doc->createAttribute( "width" );

  $imgattr1->value = 300;

  $imgattr->value = $image['path'];// this the source of my image

  $img->appendChild( $imgattr );

  $img->appendChild( $imgattr1 );

  $b->appendChild( $img );

Здесь img - элемент, и я добавил атрибут src и width, а затем добавил значение атрибута и добавил их к элементу. Если какие-либо запросы сообщат мне, я поделюсь своим полным

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