Редактирование XML-файла с несколькими атрибутами с использованием XML :: LibXML - PullRequest
0 голосов
/ 01 июня 2018

Я пытался отредактировать существующий файл XML на основе значения имени атрибута узла.

Например:

<books>
    <book name = 'Pride and Prejudice'   value='not available' price='10'/>
    <book name = 'To kill a Mockingbird'  value='available' price='8'/>
    <book name = 'The Face of a Stranger' value='not available' price='16'/>
</books>

Цель состоит в том, что если значение атрибута имени совпадает, измените значениеприписывать.Например, если имя «Гордость и предубеждение» совпадает с поиском, измените атрибут значения на «доступно».

Вывод должен выглядеть следующим образом:

<books>
    <book name = 'Pride and Prejudice' value='available' price='10'/>
    <book name = 'To kill a Mockingbird' value='available' price='8'/>
    <book name = 'The Face of a Stranger' value='not available' price='16'/>
</books>

Я смог прочитать файл XML и сопоставить значения имени, но не смог понять, как изменить значение атрибута.

Вот мой код:

my $xml_data = XML::LibXML->load_xml(location => a.xml);

for my $nodes ( $xml_data->findnodes('/Books/Book') ) {

    my $att_name = $nodes->findvalue('@name');
    my $att_val  = $nodes->findvalue('@value');

    if ( $searchString eq $att_name ) {
         <how do I change the attribute value?>
    }
}

1 Ответ

0 голосов
/ 01 июня 2018

Это должно делать, как вы хотите.Обратите внимание, что в настоящее время я не могу ничего проверитьчто правильно

for my $book ( $xml_data->findnodes('/Books/Book') ) {

    next unless $book->getAttribute('name') eq $searchString;

    $book->setAttribute('value', 'available');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...