Как получить текст внутри XmlNode - PullRequest
4 голосов
/ 07 июня 2011

Как мне получить текст, который находится внутри 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
}

И что я в конечном итоге хочу сделать, это предварительно добавить «HELP:» к тексту в каждом узле.

Ответы [ 4 ]

9 голосов
/ 07 июня 2011

Самый простой способ, вероятно, состоит в том, чтобы выполнить итерации по всем прямым дочерним узлам узла (используя ChildNodes) и проверить NodeType каждого из них, чтобы определить, является ли он Text или CDATA. Не забывайте, что может быть несколько текстовых узлов.

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

(Как и в случае с FYI, если вы можете использовать .NET 3.5, LINQ to XML будет лучше использовать лот .)

3 голосов
/ 07 июня 2011

Поиск дочерних узлов для узла с NodeType из Text и использование свойства Value этого узла.

Обратите внимание, что вы также можете выбирать текстовые узлы с помощью XPath с помощью теста text() type-type.

1 голос
/ 07 июня 2011

Отметьте это

, также вы можете проверить, какие опции вы получаете, когда пишете «читатель».

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;  
1 голос
/ 07 июня 2011

вы можете прочитать свойство InnerText из xmlnode читать node.InnerText

...