2012-02-13 86 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时,您会看到什么错误消息? – 2012-02-13 19:53:54

+0

为什么你不能进入数据集。 – sll 2012-02-13 20:09:52

+0

“格式”是不同的?你能发表一个有效的例子吗? – 2012-02-13 22:52:32

回答

1

您发布将永远不会成为一个DataSet的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;

var rows = 
    from row in 
     doc.Root.Element("database").Element(
      "table_data").Elements("row") 
    select 
     new 
      { 
       FaqId =row.XPathSelectElement("field[@name='faq_id']").Value, 
       Title = row.XPathSelectElement("field[@name='title']").Value, 
       // etc. 
      }; 
+0

那么会有一种方法可以改为逐行读取XML文档,并根据名称从中获取所需的内容吗? – mdrussell0779 2012-02-13 23:07:33

+0

即使使用LINQ to XML,你也可以做得更好。 – 2012-02-13 23:08:34

+0

约翰,这不是一个真正的选择。这页我做的本质是,我只需要通过每个迭代,并获得该行从每个字段中的值传递给函数..我在解析XML节点时完全是绿色的。 – mdrussell0779 2012-02-13 23:14:04