2013-12-23 5 views
5

Рассмотрим следующий XML:Анализировать только часть XML

<?xml version="1.0" encoding="utf-8" ?> 
<Outer> 
    <Inner1>ABC</Inner1> 
    <Inner2>DEF</Inner2> 
</Outer> 

Я хочу, чтобы иметь возможность получить значение Inner1 «s („ABC“) без разбора всего документа. Это потому, что на самом деле документ может быть довольно длинным. Есть ли способ сделать это с помощью .net (XDocument. В отличие от ручного разбора)?

ответ

7

Вы можете использовать XmlReader, он не анализирует весь документ, но и обеспечивает пересылает только доступ через документ (по аналогии с SAX парсер):

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx


что-то вроде следующего , Я думаю:

using (XmlReader reader = XmlReader.Create("sample.xml")) { 

    // Move the reader to the inner1 node 
    reader.MoveToContent(); 
    reader.ReadToDescendant("Inner1"); 

    return reader.ReadElementContentAsString(); 
} 
+0

Выглядит многообещающе. Сейчас я изучаю это. – ispiro

+0

Это то, что я искал, поэтому я принимаю ответ. Благодарю. (Хотя ваш пример имеет значение «как значение», когда я его тестирую. Возможно, я тестирую его неправильно). – ispiro

+1

Он работал, когда я использовал 'reader.ReadElementContentAsString();'. (Good ol 'intellisense :)) Еще раз спасибо. – ispiro

1

Вам нужно будет разобрать все до данных, которые вы хотите, чтобы найти и извлечь их. Однако, если вы используете XmlReader для этого, вы сможете прервать парсинг, как только найдете то, что вам нужно. В отличие от XmlDocument, вы должны загрузить весь документ, прежде чем сможете начать поиск в нем.

Смежные вопросы