1

我有一个如下所示的 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 为空。这是我的代码,我不确定自己做错了什么,我正在使用我编写的一些早期代码来解析 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"));
}

非常感谢,

阿曼达

4

2 回答 2

3

您可以使用这个简单的 Linq to Xml 查询创建字典:

Dictionary<int, string> custXML = 
            doc.Descendants("DT100")
               .ToDictionary(d => (int)d.Element("import_seq"),
                             d => (string)d.Element("field_name"));

是的,如您所见,您要提取的值是元素,而不是属性。在此处阅读差异。

于 2012-11-28T18:27:46.830 回答
2

问题在于import_seqand的值field_name不是attributes,它们是元素(元素的子<DT100>元素)。您可以继续从阅读器读取元素(不太容易),或者您可以使用 LINQ-to-XML 或序列化之类的东西来检索数据。

于 2012-11-28T18:28:18.600 回答