Замените значение в xml, используя Chef - PullRequest
0 голосов
/ 24 октября 2018

Я использую xml_edit , чтобы изменить значение xml.Это не работает с приведенным ниже сценарием.

Я хочу изменить заголовок Этвуд, Маргарет Автор в Вторая Книжная полка в ниже XML:

    <?xml version="1.0"?>
<bookshelf>
   <Name>First Bookshelf</Name>
   <book>
      <author>Conway, Damien</author>
      <title>Perl Best Practices</title>
   </book>
   <book>
      <author>Atwood, Margaret</author>
      <title>Perl Best Practices</title>
   </book>
</bookshelf>
<bookshelf>
   <Name>Second Bookshelf</Name>
   <book>
      <author>Conway, Damien</author>
      <title>Perl Best Practices</title>
   </book>
   <book>
      <author>Atwood, Margaret</author>
      <title>Perl Best Practices</title>
   </book>
</bookshelf>

Я пытаюсь использовать ниже рецепт.Я не знаю, как я могу проверить Имя и автора второй книжной полки.

xml_edit 'change title' do
    path 'C:\\testing\\text.xml'
    target '/bookshelf/book/title[text()=\'Perl Best Practices\']'
    fragment '<title>Hello World</title>'
    action :replace

end

1 Ответ

0 голосов
/ 24 октября 2018

Похоже, ваш xml недействителен. Он должен выглядеть следующим образом:

<?xml version="1.0"?>
<shelves>
<bookshelf>
    <Name>First Bookshelf</Name>
    <book>
        <author>Conway, Damien</author>
        <title>Perl Best Practices</title>
    </book>
    <book>
        <author>Atwood, Margaret</author>
        <title>Perl Best Practices</title>
    </book>
</bookshelf>
<bookshelf>
    <Name>Second Bookshelf</Name>
    <book>
        <author>Conway, Damien</author>
        <title>Perl Best Practices</title>
    </book>
    <book>
        <author>Atwood, Margaret</author>
        <title>Perl Best Practices</title>
    </book>
</bookshelf>
</shelves>

Имея это в виду, вы можете сделать:

xml_edit 'change title' do
    path 'C:\\testing\\text.xml'
    target '/shelves/bookshelf[Name[text()=\'Second Bookshelf\']]/book[author[text()=\'Atwood, Margaret\']]/title'
    fragment '<title>Hello World</title>'
    action :replace
end
...