如何在C#

时间:2017-05-15 14:07:22

标签: c# xml parsing xml-parsing xmlreader

在此输入XML文档的代码:

<foo>
  <bar><para> test </para> </bar>
  <bar>text</bar>
  <bar>stackoverflow</bar>
</foo>

我正在尝试解析它并且只获得字符串中的字符串;通过这种方式:

[其中节点为foo的函数]

foreach (XmlNode subNode in node.ChildNodes)
{

 if (subNode.Name == "bar")
 {
    if (!String.IsNullOrWhiteSpace(subNode.InnerText))
     Debug.WriteLine(subNode.Name + " - " subNode.InnerText);
 }

}

然而它给了我测试

由于

2 个答案:

答案 0 :(得分:1)

这是您正在寻找的(根据您更新的问题编写)

XDocument doc = XDocument.Load(path to your xml file);
XNamespace ns = "http://docbook.org/ns/docbook";

var result = doc.Root.Descendants(ns + "para")
                     .Where(x => x.FirstNode.NodeType == System.Xml.XmlNodeType.Text)
                     .Select(x => x.Value)
                     .ToList();

在您更新的xml中,我看到您正在使用命名空间,因此您的节点名称不是para,而是theNameSpace + "para"。命名空间在xml文件的第一行中定义。您也可以看到this样本。

答案 1 :(得分:0)

你想要&#34;测试&#34;?请尝试以下方法:

            string input =
                "<foo>" +
                  "<bar><para> test </para> </bar>" +
                  "<bar>text</bar>" +
                  "<bar>stackoverflow</bar>" +
                "</foo>";


            XDocument doc = XDocument.Parse(input);

            List<string> bars = doc.Descendants("bar").Where(x => x.NextNode != null).Select(x => (string)((XElement)x.NextNode)).ToList();