Xerces: Как объединить дубликаты узлов? - PullRequest
3 голосов
/ 07 июня 2009

Мой вопрос такой:

Если у меня есть следующий XML:

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>

и тогда я добавлю следующий путь:

<root><alpha one="start"><out>2</out></alpha></root>

, что приводит к

<root>
  <alpha one="start">
    <in>1</in>
  </alpha>
</root>
<root>
  <alpha one="start">
    <out>2</out>
  </alpha>
</root>

Я хочу иметь возможность преобразовать это в это:

<root>
  <alpha one="start">
    <in>1</in>
    <out>2</out>
  </alpha>
</root>

Помимо реализации этого самостоятельно (не хочется изобретать велосипед сегодня), в Xerces (2.8, C ++) есть определенный способ сделать это?

Если это так, в какой момент жизни DOMDocuments выполняется объединение узлов? на каждой прошивке? при написании документа, явно по требованию?

Спасибо.

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Если вы используете xalan, можно использовать xpath, чтобы найти элемент и напрямую вставить в корректный.

Следующий код может быть медленным, но возвращает все «корневые» элементы с атрибутом «one», установленным в «start».

selectNodes("//root[@one="start"]")

Вероятно, лучше использовать полный путь

selectNodes("/abc/def/.../root[@one="start"]")

или если у вас уже есть родительский элемент, работающий относительно

selectNodes("./root[@one="start"]")

Я думаю получить основные понятия xpath в Википедии .

0 голосов
/ 07 июня 2009

Разве это не минутная задача, если вы знаете имена тегов контейнера, в которых присутствуют различные теги?

В вашем примере получите указатель на тег alpha во всех документах XML и поместите содержимое всех них в альфа нового документа, если они там еще не присутствуют.

Это не так плохо, как изобретать велосипед. Я не знаком с Xerces, но с libxml ++ я бы назвал это легкой задачей.

...