Мне нужно выполнить синтаксический анализ и поиск информации из документов XML. XML-документ привязан к привязке данных XML, затем анализируется для определенных элементов. После того, как я выделил элементы, которые мне нужно проанализировать, я беру каждый по очереди (назовем его E_parent) и попытаюсь определить местоположение каждого нетекстового дочернего элемента (E_child) в общем XML-тексте E_parent и сделать некоторые манипуляции или другие.Delphi, MSXML: как получить XML-узел узла без пространства имен документов?
Проблема, с которой я столкнулась, заключается в том, что пространство имен XML-документа добавляется к XML-элементам дочерних элементов, когда к ним обращаются индивидуально.
Для примера, скажем, исходный документ выглядит следующим образом:
<?xml version="1.0" encoding="windows-1252"?>
<RootNode xml:lang="en" xmlns="urn:blah:names:blahblah">
<E_parent>Some text <E_child>child text</E_child> more parent text</E_parent>
</RootNode>
</xml>
Когда я пытаюсь получить доступ к XML-либо из элемента E_parent или E_child делать что-то вроде:
xmlParent := parentNode.XML;
I получить:
<E_parent xmlns="urn:blah:names:blahblah">Some text <E_child>child text</E_child> more parent text</E_parent>
То же самое, если я пытаюсь получить доступ к XML для E_child, я получаю:
<E_child xmlns="urn:blah:names:blahblah">child text</E_child>
Это проблема, когда я затем попытаться выполнить поиск текста на родительский элемент, так как «реальный» текст не содержит, что объявление пространства имен:
Some text <E_child>child text</E_child> more parent text
До сих пор я это связано с обнаружением/удалением нежелательных атрибутов пространства имен в строках, но оно очень неэффективно и некрасиво; o) Итак, мой вопрос заключается в том, как я могу получить XML-данные различных узлов из связанного XML-документа без пространство имен документов добавляется в теги?
=========
Благодаря Реми, это было настолько очевидно, мне просто нужно начать с пустой строки и построить его, а не начинать с внутреннего XML!
Обратите внимание, что это лучшее обходное решение, чем тот, который у меня был для этой конкретной ситуации, но не совсем то, что я хотел - получение XML элементов без пространства имен будет по-прежнему полезно для других вещей, таких как ведение журнала, где мне нужен точный XML-узел, как он появляется в исходном документе.
Поиск текста внутри XML? Что вы на самом деле пытаетесь сделать здесь? –
@ Leonardo: Вопрос, который я должен был задать * перед отправкой ответа. –
Если вы хотите зарегистрировать точный XML-код, вам не следует вообще извлекать что-либо из вашего объекта XML. Это позволит * повторно сериализовать * объект, поэтому, даже если он не включает пространства имен, он все равно может отличаться от исходного текста XML. Вместо этого вернитесь и зарегистрируйте исходный текст, который вы поместили в объект XML, в первую очередь. –