如果我们有这个XML文件,我们如何使用XPath在一个对象中选择几个项目?
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tyler</ARTIST>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
</CATALOG>
所需的对象应该有:
myObj[0].TITLE = "Empire Burlesque";
myObj[0].ARTIST = "Bob Dylan";
myObj[0].COUNTRY = "USA";
myObj[1].TITLE = "Hide your heart";
myObj[1].ARTIST = "Bonnie Tyler";
myObj[1].COUNTRY = NULL;
myObj[2].TITLE = "Greatest Hits";
myObj[2].ARTIST = NULL;
myObj[2].COUNTRY = NULL;
我的第一个想法是使用一些多选XPath,或选择3个列表(3个不同的xpath),但我不知道如何在元素不存在的情况下返回NULL。
答案 0 :(得分:1)
你可以有一个处理内部元素存在的方法,如下所示。但是,如果您要将XML文件转换为C#对象,也许您可以查看序列化属性。
class Program
{
static void Main(string[] args)
{
var doc = new XmlDocument();
doc.LoadXml(@"<CATALOG>...</CATALOG>");
var items = new List<CompactDisk>();
foreach (XmlElement cd in doc.SelectNodes("//CD"))
{
items.Add(new CompactDisk
{
Title = GetValue(cd, "TITLE"),
Artist = GetValue(cd, "ARTIST"),
Country = GetValue(cd, "COUNTRY"),
});
}
}
static string GetValue(XmlElement node, string xpath)
{
var result = node.SelectSingleNode(xpath);
return result == null ? null : result.InnerText;
}
class CompactDisk
{
public string Title { get; set; }
public string Artist { get; set; }
public string Country { get; set; }
}
}