Как мне сопоставить полные объекты XML в строке? - PullRequest
1 голос
/ 27 мая 2010

Я пытаюсь найти полные объекты XML в строке. Они были помещены в строку как XmlSerializer, но могут быть или не быть полными. Я поиграл с идеей использования регулярных выражений, потому что это похоже на то, для чего они были созданы, за исключением того факта, что я пытаюсь разобрать XML.

Я пытаюсь найти полные объекты в форме:

<?xml version="1.0"?>
<type>
    <field>value</field>
    ...
</type>

Я думал, что это регулярное выражение для поиска <?xml version="1.0"?><type> и </type>, но если поле имеет то же имя, что и type, оно, очевидно, не будет работать.

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

hw<e>reR@lot$0fr@ndm&nchrs%<?xml version="1.0"?><type><field>...</field>...</type>@ndH#r$omOre!!>nuT6erjc?y!<?xml version="1.0"?><type><field>...</field>...</type>ty!=]

Регулярное выражение сможет сопоставить строку, исключая случайные символы, но не найдет complete объект XML. Мне нужен какой-то способ извлечь объект, проанализировать его с помощью сериализатора, а затем повторять до тех пор, пока в строке не останется больше допустимых объектов.

Ответы [ 2 ]

0 голосов
/ 28 мая 2010

Можно ли использовать регулярное выражение для поиска фрагмента "<?xml", а затем предположить, что это начало объекта XML, а затем использовать XMLReader для чтения / проверки оставшейся части строки, пока вы не проанализируете один элемент целиком на корневом уровне (затем прекратить чтение из потока с помощью XMLReader после того, как корневой узел был полностью проанализирован)?

Редактировать: Для получения дополнительной информации об использовании XMLReader я предлагаю один из заданных мной вопросов: Я никогда не могу предсказать поведение xmlreader, какие-либо советы по пониманию?

Мое окончательное решение состояло в том, чтобы придерживаться метода «Чтение» при синтаксическом анализе XML и избегать других методов, которые фактически читают из потока, продвигающего текущую позицию.

0 голосов
/ 27 мая 2010

Вы можете попробовать использовать Html Agility Pack , который можно использовать для анализа "искаженного XML" и сделать его доступным с DOM.

Было бы необходимо знать, какой элемент вы ищете (например, <type> в вашем примере), поскольку он также будет анализировать случайные элементы (например, <e> в вашем примере).

...