2012-11-28 214 views
1

返回null我有一個看起來像這樣的XML文件: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")); 
} 

非常感謝,

阿曼達

回答

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

謝謝你,工作就像一個魅力,是的,我仍然在學習我的XML術語! –

+0

@Amanda_Panda我認爲這個鏈接對你很有用http://www.w3schools.com/dtd/dtd_el_vs_attr.asp –

2

的問題是,import_seqfield_name值不屬性,他們元素(該<DT100>元素的兒童)。您可以繼續閱讀閱讀器中的元素(不是很容易),也可以使用LINQ-to-XML或序列化等方式來檢索數據。