我有以下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());
}
我知道这个没有任何论据所以是错误的。我只是不知道使用哪一个......
答案 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.SelectNodes
和XmlNode.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;