如何在c#中读取非结构化XML
本文关键字:结构化 XML 读取 | 更新日期: 2023-09-27 18:18:13
我想读取非结构化的XML。子元素的数量可以增加或减少。在c#中读取这种类型的XML的最佳方法是什么?示例XML如下
<?xml version="1.0" encoding="UTF-8"?>
<entities>
<entity>
<type>Organization</type>
<relevance>0.918192</relevance>
<sentiment>
<type>neutral</type>
</sentiment>
<count>1</count>
<text>Wheelers Hill Secondary College Deb Ball</text>
</entity>
<entity>
<type>Organization</type>
<relevance>0.621802</relevance>
<sentiment>
<type>positive</type>
<score>0.789945</score>
</sentiment>
<count>1</count>
<text>Greensborough College</text>
<disambiguated>
<name>Greensborough College</name>
<subType>School</subType>
<website>http://www.greensc.vic.edu.au/</website>
<dbpedia>http://dbpedia.org/resource/Greensborough_College
</dbpedia>
<freebase>http://rdf.freebase.com/ns/m.0bp2jy</freebase>
</disambiguated>
</entity>
</entities>
在c#中读取XML的最佳方法是使用LINQ。您可以使用下面的代码来查询XML并获得所需的元素。
首先创建一个扩展方法来检查一个元素是否存在并返回它的值
public static string CheckAndGetElementValue(this XElement parent, string elementName, string defaultValue = null)
{
var el = parent.Element(elementName);
if(el != null)
{
return el.Value;
}
else
{
return defaultValue;
}
}
在获取元素的值时使用扩展方法:
XDocument xDoc = XDocument.Load("filename");
var listitems = (from el in xDoc.Descendants("entities")
where el.Element("entity").CheckAndGetElementValue("type") == "Organization"
select el);