从Xml文件中检索一些数据

时间:2010-12-13 08:10:51

标签: c# xml

我有一个关于阅读xml的问题。我的xml格式是这样的:

<?xml version="1.0" encoding="utf-8"?>
<object type="System.Windows.Forms" name="Form1">
   <object>    
      <object type="label" name="lbl1">
         <prop>firstname</prop>
      </object>
   <dataset>
      <table name="tblOne">
         <data>
            <prop1>AA</prop1>
            <prop2>BB</prop2> 
         <data>     
     </table>
     <table name="tblTwo">
        <data>          
           <prop1>CC</prop1>        
        </data>
     </table>
   </dataset>
      <object>     
         <object type="textbox" name="txt1">
          <prop>ABC</prop>  
     </object>
   <dataset>
      <table name="tblThree>
         <data>         
            <prop1>DD</prop1>
               <prop2>EE</prop2>        
         </data>
      </table>
   </dataSet>
</object>

我想检索数据集表中的所有数据,如

<prop1>AA</prop1>
<prop2>BB</prop2> 
<prop1>CC</prop1>
<prop1>DD</prop1>
<prop2>EE</prop2> 

然后我需要检查这些项目是prop1还是prop2,我将它插入到某个table.i我正在使用c#。我如何阅读xml?

5 个答案:

答案 0 :(得分:3)

获取名称/值对:

var root = XElement.Parse(xml);
var pairs = (from prop in root.Descendants("data").Elements()
             where prop.Name.LocalName.StartsWith("prop")
             select new { Name = prop.Name.LocalName, Value = (string)prop }
            ).ToList();

然后只需迭代并添加到您要缩进的任何表中:

foreach(var pair in pairs) {
     // use pair.Name and pair.Value
}

答案 1 :(得分:1)

我建议你搜索谷歌c# xml

答案 2 :(得分:0)

您可以使用xpath。 '// data'表达式将返回所有数据元素

XmlDocument xml = new XmlDocument();
xml.LoadXml(str);  // replace str with xml

XmlNodeList xnList = xml.SelectNodes("//data");

foreach (XmlNode xn in xnList)
{
   //Read <prop> nodes
}

XPath Examples

Manipulate XML data with XPath and XmlDocument (C#)

答案 3 :(得分:0)

试试这个

var doc = XDocument.Parse(sourceText);
var result = doc.Descendants("data").Descendants();

答案 4 :(得分:0)

这是提示......它会起作用....

       protected void Page_Load(object sender, EventArgs e)
     {
        this.data1();
        DataSet ds = new DataSet();
        ds.ReadXml(Server.MapPath("~/xyz.xml"));
        lblMsg.Text = ds.Tables[0].Rows[0]["data"].ToString();
    }

    private void data1()
    {

        DataSet ds = new DataSet();
        ds.ReadXml(Server.MapPath("~/xyz.xml"));
        int data = Int32.Parse(ds.Tables[0].Rows[0]["data"].ToString());
        hits += 1;
        ds.Tables[0].Rows[0]["data"] = data.ToString();
        ds.WriteXml(Server.MapPath("~/xyz.xml"));

    }