我有一个如下所示的XML文件:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<DT100>
<company_id>online00020120523888</company_id>
<template_type>100</template_type>
<import_seq>1</import_seq>
<field_name>cust_acct_no</field_name>
<display_name>Account No</display_name>
<data_type>0</data_type>
<internal_num>0</internal_num>
<internal_info>{}</internal_info>
</DT100>
.
.
.
对于每个DT100,我正在尝试将import_seq和field_name读入字典。但是,当我单步执行调试器时,我将为import_seq和field_name获取null。这是我的代码,我不确定我做错了什么,我正在使用我编写的解析XML的早期代码,所以我认为应该正在工作,但事实并非如此。
XDocument doc = XDocument.Load("foo.xtp");
String feed = doc.ToString();
string import_seq = "";
string field_name = "";
XmlReader r = XmlReader.Create(new StringReader(feed));
Dictionary<string, string> custXML = new Dictionary<string, string>();
r.ReadToFollowing("NewDataSet");
if(r.ReadToDescendant("DT100"))
{
do
{
import_seq = r.GetAttribute("import_seq");
field_name = r.GetAttribute("field_name");
custXML.Add(import_seq, field_name);
}
while (r.ReadToNextSibling("DT100"));
}
非常感谢,
阿曼达
答案 0 :(得分:3)
您可以使用这个简单的Linq to Xml查询创建字典:
Dictionary<int, string> custXML =
doc.Descendants("DT100")
.ToDictionary(d => (int)d.Element("import_seq"),
d => (string)d.Element("field_name"));
是的,正如您所看到的,您要提取的值是元素,而不是属性。阅读差异here。
答案 1 :(得分:2)
问题是import_seq
和field_name
的值不是属性,它们是元素({{}的子元素1}}元素)。您可以继续阅读阅读器中的元素(不是太容易),或者您可以使用LINQ-to-XML或序列化等方法来检索数据。