2010-12-13 3 views
2

У меня есть Xml документ, в котором некоторые из элементов выглядеть следующим образом:XmlReader InnerText Проблема

<rootNode attib1="qwerty" > 
<subNode1>W</subNode1> 
<subNode2>X</subNode2> 
<subNode3>Y</subNode3> 
<subNode4>Z</subNode4> 
ABC 
</rootNode> 

Моя цель, чтобы получить «ABC» из приведенного выше примера. Я попытался взглянуть на InnerText (который возвращает «WXYZABC») и InnerXml и Value (который возвращает null) свойства в классе XmlElement и кучу свойств в классе XmlReader. Почему-то я не вижу изящного способа извлечь нужные мне данные.

Может кто-то, пожалуйста, помогите мне?

Заранее спасибо.

+1

Не имеет ли элемент rootNode дополнительный XmlElement типа XmlTextNode со значением ABC? –

ответ

1

Основываясь на отличное предложение от @djechelon, я, кажется, нашел решение этой:

XmlDocument xdoc = new XmlDocument(); 
     xdoc.Load(@"D:\Test.xml"); 
     XmlElement xmlElement = xdoc.DocumentElement; 
     foreach (XmlNode node in xmlElement.ChildNodes) 
      if (node.NodeType == XmlNodeType.Text 
       && !string.IsNullOrWhiteSpace(node.Value)) 
       Console.WriteLine(node.Value.Trim()); 

выше использует тот простой факт, что внутренний текст также XmlNode как часть коллекции ChildNodes XmlElement.

Спасибо всем за отличные ответы!

0

Попробуйте XmlElement.Value

Edit: Это неправильный подход, так как это всегда будет возвращать NULL на узле элемента.

+1

@Keith, 'XmlElement.Value' всегда возвращает' null'. Кроме того, опрос говорит, что он уже пробовал это :) –

+0

XmlElement.Value возвращает ненулевые значения только тогда, когда элемент является листовым узлом AFAIK. – Chetan

+0

@Chetan, nope, всегда 'null'. См. Http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value.aspx. –

3

Имейте идти с этим один:

string xml = @"<rootNode attib1=""qwerty"" > 
    <subNode1>W</subNode1> 
    <subNode2>X</subNode2> 
    <subNode3>Y</subNode3> 
    <subNode4>Z</subNode4> 
    ABC 
</rootNode>"; 

var xElement = XElement.Parse(xml); 
xElement.Elements().Remove(); 
xElement.Value.Dump(); 

Что она делает это удалить все известные элементы и оставляет вас с текстом которого вы ищете.