Код для вставки произвольной строки XML в документ XML с помощью XPath - PullRequest
1 голос
/ 18 апреля 2011

Я пытаюсь создать сценарий, который обертывает класс Groovy, который будет принимать следующие аргументы:

  1. Входной файл XML для обновления.
  2. Произвольный фрагмент для вставки ввходной файл (может даже не быть правильно сформированным сам по себе; он станет частью большого правильно сформированного документа).
  3. XPath для элемента маркера (используется для позиционирования фрагмента в # 2).
  4. Действие (вставить до, вставить после, добавить дочерний элемент).
  5. Необязательный выходной XML-файл.

Я не могу найти APIэто позволит мне:

  1. Найти узел по XPath и
  2. Cram XML из строки, смежной с узлом.

Есть ли у кого-нибудь какие-нибудьидеи для технологий, которые я могу объединить для достижения этого эффекта?Маленькие примеры были бы особенно полезны.

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Я подозреваю, что то, что я пытался сделать, нетривиально и потребовало бы гораздо большей структуры, чем то, на что у меня было время.Я закончил тем, что оставил это усилие.

0 голосов
/ 18 апреля 2011

Если фрагмент правильно сформирован, большинство реализаций DOM, которые я видел, также будут поддерживать нестандартный тип узла DocumentFragment, который позволяет вставлять узлы dom из строки.

РЕДАКТИРОВАТЬ: быстрый поиск Google выдаетнекоторые JavaDocs: http://download.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/DocumentFragment.html IIRC API работает следующим образом (псевдокод):

parent = find_parent_node_of_fragment(document);

fragment = document.createDocumentFragment();
fragment.appendXML("<my>xmlstring</my>");

parent.appendChild(fragment);

Если у вас нет такой роскоши или если ваша строка плохо сформирована, есть возможностьinject CDATA.

Если вы не можете обойтись инъекцией CDATA (потому что вы, по сути, хотите повлиять на последующие узлы, например, новый узел должен стать родителем старых узлов, которые будут включены в новый документ), вы можете попробовать преобразование XSLT.

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