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 に対して 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"));
}

どうもありがとう、

アマンダ

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_seqfield_nameはなく、要素(要素の子) であることです。リーダーから要素を読み続けることも (簡単ではありません)、LINQ-to-XML やシリアル化などを使用してデータを取得することもできます。<DT100>

于 2012-11-28T18:28:18.600 に答える