将xml中的多个节点转换为List <string>(C#)

时间:2015-12-07 16:28:29

标签: c# xml

我有以下xml文件:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<termsAndConditions>
  <logo>
    logo1.gif
  </logo>
  <link>
    https://www.mysite.co.uk/Terms%20and%20Conditions.pdf
  </link>
  <paragraphs>
    <text>
      I accept that all the information I have provided is truthful and accurate and I understand that all the information I have provided will be checked and verified. I acknowledge that I have read and accepted all the Terms and Conditions of the site’s Parking Regulations, for full details click here.
    </text>
    <text>
      Paragraph 2
    </text>
    <text>
       Paragraph 3
    </text>
    <text>
       Paragraph 4
    </text>
  </paragraphs>
</termsAndConditions>

现在我可以使用以下命令将节点转换为字符串:

XmlDocument doc = new XmlDocument();
doc.Load("\\termConditionsExample.xml");
XmlNode node = doc.DocumentElement.SelectSingleNode("/termsAndConditions/logo");
string myString = node.InnerText;

但是我如何为xml文件中的“paragraph / text”执行此操作以将它们转换为List类型?我尝试过使用下面的一个不同的DocumentElement方法,但它不起作用:

List<string> paragraphs = new List<string>();
            foreach(var temp in doc.DocumentElement.ChildNodes)
            {
                paragraphs.Add(temp.ToString());
            }

我知道这个没有任何论据所以是错误的。我只是不知道使用哪一个......

3 个答案:

答案 0 :(得分:3)

我发现LINQ-to-XML更容易处理这类事情(例如XDocument而不是XmlDocument)。

var xdoc = XDocument.Load("\\termConditionsExample.xml");
IEnumerable<string> textValues = xdoc.Descendants("text").Select(e => e.Value);

Xml反序列化也可能是一种合适的方法,正如C. Knight在评论中提到的那样。

答案 1 :(得分:0)

您可以使用XmlDocument.SelectNodesXmlNode.InnerText

foreach (XmlNode node in doc.SelectNodes("/termsAndConditions/paragraphs/text"))
  paragraphs.Add(node.InnerText.Trim());

答案 2 :(得分:0)

以下是如何将XPath与XDocument类一起使用:

XDocument document = XDocument.Load(filename);

var result =
    document
        .XPathSelectElements("termsAndConditions/paragraphs/text")
        .Select(x => x.Value.Trim())
        .ToList();

它允许您选择仅在指定路径中的text元素(不是整个xml文件中的所有text元素)。

确保导入System.Xml.XPath命名空间,如下所示:

using System.Xml.XPath;