在ASP.NET中读取XML文档

时间:2012-02-13 19:49:55

标签: c# .net xml

我有一个带有有趣格式的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代码来正确读取这些内容的任何建议?

2 个答案:

答案 0 :(得分:1)

您发布的XML永远不会进入DataSet。

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.
            };

答案 1 :(得分:0)

我确信XmlDocument会帮助您阅读此xml。