Замена узла XML на Anti-XML - PullRequest
4 голосов
/ 20 ноября 2011

Я пытаюсь заменить элемент XML другим, используя библиотеку anti-xml. Например, у меня есть:

<root>
  <sub>
    <keep />
    <replace />
    <keeptoo />
  </sub>
</root>

и фрагмент:

<inserted key="value">
  <foo>foo</foo>
  <bar>bar</bar>
</inserted>

Я хотел бы произвести:

<root>
  <sub>
    <keep />
    <inserted key="value">
      <foo>foo</foo>
      <bar>bar</bar>
    </inserted>      
    <keeptoo />
  </sub>
</root>

Примечание: Порядок <sub> детей должен быть сохранен.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

Сначала мы определяем корневой документ:

val root = 
<root>
  <sub>
    <keep />
    <replace />
    <keeptoo />
  </sub>
</root>.convert

val inserted =
  <inserted key="value">
    <foo>foo</foo>
    <bar>bar</bar>
 </inserted>.convert

, затем получаем элемент:

val replace = root \\ 'replace

и, наконец, получаем XML с обновленным узлом <replace/>:

replace.updated(0, inserted).unselect

если мы получим несколько <replace/> узлов, мы сможем перебрать replace для обновления каждого узла.

2 голосов
/ 16 марта 2012

Вы можете заменить выбранные элементы несколькими узлами, используя flatMap, например, replace.flatMap(_ => someListOfNodes).unselect

(Извините, что выделила отдельный ответ, похоже, я не могу комментировать существующие.)

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