2010-12-13 72 views
2

我有一個XML文件中的一些內容是這樣的:的XmlReader的innerText問題

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

我的目標是獲得「ABC」出了上述例子。我試着在XmlElement類中的InnerText(它返回「WXYZABC」)和InnerXml和Value(它返回null)屬性以及XmlReader類中的一堆屬性。不知何故,我沒有看到一種優雅的方式來提取我需要的數據。

有人可以幫我嗎?

在此先感謝。

+1

不是rootNode元素是否具有值爲ABC的XmlTextNode類型的附加XmlElement? – 2010-12-13 19:41:13

回答

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

編輯:這是錯誤的做法,因爲這將始終是一個元素節點上返回NULL。

+1

@Keith,'XmlElement.Value'總是返回'null'。另外,提問者說他​​已經試過:) – 2010-12-13 19:24:00

+0

僅當元素是葉節點AFAIK時,XmlElement.Value才返回非空值。 – Chetan 2010-12-13 19:26:07

+0

@Chetan,nope,總是'null'。請參閱http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.value.aspx。 – 2010-12-13 19:27:12

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(); 

它能做什麼是去除所有已知的元素,並留下您與您正在尋找的文本。