2011-06-07 68 views
3

如何獲取XmlNode中的文本?見下:如何在XmlNode中獲取文本

XmlNodeList nodes = rootNode.SelectNodes("descendant::*"); 
for (int i = 0; i < nodes.Count; i++) 
{ 
    XmlNode node = nodes.Item(i); 

    //TODO: Display only the text of only this node, 
    // not a concatenation of the text in all child nodes provided by InnerText 
} 

而我最終想要做的是prepend「HELP:」到每個節點的文本。

回答

9

最簡單的方法很可能會超過迭代節點(使用ChildNodes)的所有直接子和測試每一個的NodeType,看它是否是TextCDATA。不要忘記,可能有多個文本節點。

foreach (XmlNode child in node.ChildNodes) 
{ 
    if (child.NodeType == XmlNodeType.Text || 
     child.NodeType == XmlNodeType.CDATA) 
    { 
     string text = child.Value; 
     // Use the text 
    } 
} 

(正如一個供參考,如果你可以使用.NET 3.5,LINQ到XML是一個很多更好使用。)

+0

'ChildNodes'是一個'XmlNodeList',它實現了'IEnumerable'的非泛型版本。因此,您需要在上面的循環中明確說明「child」的類型,即「foreach(node.ChildNodes中的XmlNode子節點)」。 – LeopardSkinPillBoxHat 2015-07-13 03:30:17

+0

@LeopardSkinPillBoxHat:已修復,謝謝。 – 2015-07-13 05:52:17

1

你可以閱讀的XMLNode 的InnerText屬性讀取node.InnerText

+0

在代碼中的註釋明確地說,OP *不*希望所有子節點內獲得級聯文本,這就是InnerText所做的。 – 2011-06-07 14:25:09

+0

不是我在找什麼。請參閱文檔:「獲取或設置節點及其所有子節點的**連接**值。」 – joe 2011-06-07 14:26:01

3

搜索節點的孩子節點與TextNodeType,並使用該節點的Value屬性。

請注意,您還可以使用text()節點類型測試選擇帶有XPath的文本節點。

1

選中此項

您還可以查看您在寫入「讀取器」時會得到的選項。

xml文件

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 
<ISO_3166-1_List_en xml:lang="en"> 
    <ISO_3166-1_Entry> 
     <ISO_3166-1_Country_name>SINT MAARTEN</ISO_3166-1_Country_name> 
     <ISO_3166-1_Alpha-2_Code_element>SX</ISO_3166-1_Alpha-2_Code_element> 
    </ISO_3166-1_Entry> 
    <ISO_3166-1_Entry> 
     <ISO_3166-1_Country_name>SLOVAKIA</ISO_3166-1_Country_name> 
     <ISO_3166-1_Alpha-2_Code_element>SK</ISO_3166-1_Alpha-2_Code_element> 
    </ISO_3166-1_Entry> 
</ISO_3166-1_List_en> 

和讀者很基本,但快

XmlTextReader reader = new XmlTextReader("c:/countryCodes.xml"); 
     List<Country> countriesList = new List<Country>(); 
     Country country=new Country(); 
     bool first = false; 
     while (reader.Read()) 
     { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: // The node is an element. 
      if (reader.Name == "ISO_3166-1_Entry") country = new Country(); 
      break; 
      case XmlNodeType.Text: //Display the text in each element. 
      if (first == false) 
      { 
       first = true; 
       country.Name = reader.Value; 
      } 
      else 
      { 
       country.Code = reader.Value; 
       countriesList.Add(country); 
       first = false; 
      }      
      break;   
     }   
     } 
     return countriesList;