2012-02-13 18 views
0

私はデータセットに入ることができない面白い書式のXML文書を持っています。ASP.NETでXML文書を読む

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<database name="magento"> 
<table_structure name="cignex_faq"> 
    <field Field="faq_id" Type="int(10) unsigned" Null="NO" Key="PRI" Extra="auto_increment" /> 
    <field Field="title" Type="varchar(255)" Null="NO" Key="" Default="" Extra="" /> 
    <field Field="meta_keywords" Type="text" Null="NO" Key="" Extra="" /> 
    <field Field="meta_description" Type="text" Null="NO" Key="" Extra="" /> 
    <field Field="faqcontent" Type="text" Null="NO" Key="" Extra="" /> 
    <field Field="creation_time" Type="datetime" Null="YES" Key="" Extra="" /> 
    <field Field="update_time" Type="datetime" Null="YES" Key="" Extra="" /> 
    <field Field="status" Type="tinyint(1)" Null="NO" Key="" Default="0" Extra="" /> 
    <field Field="category_ids" Type="text" Null="YES" Key="" Extra="" /> 
    <field Field="faqrelease_date" Type="datetime" Null="YES" Key="" Extra="" /> 
    <key Table="cignex_faq" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="faq_id" Collation="A" Cardinality="267" Null="" Index_type="BTREE" Comment="" /> 
    <options Name="cignex_faq" Engine="InnoDB" Version="10" Row_format="Compact" Rows="276" Avg_row_length="1365" Data_length="376832" Max_data_length="0" Index_length="0" Data_free="0" Auto_increment="323" Create_time="2011-09-12 16:38:02" Collation="utf8_general_ci" Create_options="" Comment="InnoDB free: 1639424 kB" /> 
</table_structure> 
<table_data name="cignex_faq"> 
<row> 
    <field name="faq_id">20</field> 
    <field name="title">foo</field> 
    <field name="meta_keywords"></field> 
    <field name="meta_description"></field> 
    <field name="faqcontent">foo</field> 
    <field name="creation_time">2010-08-13 21:41:51</field> 
    <field name="update_time">2011-10-06 18:52:48</field> 
    <field name="status">1</field> 
    <field name="category_ids"></field> 
    <field name="faqrelease_date">2010-08-13 00:00:00</field> 
</row> 
<row> 
    <field name="faq_id">21</field> 
    <field name="title">foo</field> 
    <field name="meta_keywords"></field> 
    <field name="meta_description"></field> 
    <field name="faqcontent">foo</field> 
    <field name="creation_time">2010-08-16 20:58:24</field> 
    <field name="update_time">2011-10-06 18:52:11</field> 
    <field name="status">1</field> 
    <field name="category_ids"></field> 
    <field name="faqrelease_date">2010-08-16 00:00:00</field> 
</row> 

</table_data> 
</database> 
</mysqldump> 

以前は、これはうまく働いた:

DataSet dsFaq; 
String filePath = Server.MapPath("RU_xml_faq_101311.xml"); 

dsFaq = new DataSet(); 
dsFaq.ReadXml(filePath); 

foreach (DataRowView r in dvFaq) { 
    Response.Write("Importing " + r["title"].ToString() + "<br>"); 
} 

しかし、私が慣れてると、この文書の書式設定は同じではありません。この読み物を正しく読み込むために私が使用できるReadXMLコードについてのアドバイスはありますか?

+1

xmlを読み込もうとすると、どのようなエラーメッセージが表示されますか? –

+0

なぜあなたは 'データセットに入ることができないのですか? ' – sll

+0

「書式設定」は異なりますか?うまくいった例を投稿できますか? –

答えて

1

あなたが投稿したXMLは決してデータセットに入りません。

DataSetクラスは、リレーショナルデータベースのメモリ内表現であり、テーブルが関連付けられています。この新しいXMLは、どのような形でもそのモデルと一致しません。


非常に簡単な、部分的な例:

XDocument doc = XDocument.Load(fileName); 
var rows = from row in doc.Root.Element("database").Element("table_data").Elements("row") 
      let fields = row.Elements("field") 
      select new 
         { 
          FaqId = fields.Where(element => element.Attribute("name").Value == "faq_id").First().Value, 
          Title = fields.Where(element => element.Attribute("name").Value == "title").First().Value, 
          // etc. 
         }; 

少しきれい。追加してくださいusing System.Xml.Xpath;

+0

代わりに、XMLドキュメントを1行ずつ読み込み、必要なものを名前で取得する方法がありますか? – mdrussell0779

+0

LINQ to XMLを使用しても、これ以上のことができます。 –

+0

ジョン、それは実際には選択肢ではありません。私がやっているこのページの性質は、それぞれを反復し、行の各フィールドから値を取得して関数に渡す必要があるということです。私はXMLノードを解析するだけで完全にグリーンです。 – mdrussell0779

0

私はXmlDocumentがこのxmlを読むのに役立つと確信しています。