如何提取这样的XML文件设置的值?

时间:2016-02-18 00:13:22

标签: c# xml winforms visual-studio-2015

Visual Studio 2015(C#,WinForms)

我似乎无法在任何地方找到关于如何从奇数标签中提取数据的合适教程或示例。他们中的大多数只有简单标签之间的值。有一个简单的方法吗?

XML文件的设置如下:

<root>
  <object type="Item">
      <field name="id">12345</field>
      <field name="name">Item Name</field>
      <field name="description">Item Description</field>
      <field name="Image">
           <object type="Graphic">
                <field name="format">PNG</field>
                <field name="width">100</field>
                <field name="height">200</field>
           </object>
      </field>
  </object>
</root>

如何弹出每个节点的值并将它们放入每个节点的文本框中?

3 个答案:

答案 0 :(得分:1)

您可以使用XPathNavigator执行此操作。 将xml加载到XmlDocument a然后创建XPathNavigator以获取值

var xDoc = new XmlDocument();
xDoc.Load("XMLFile1.xml");
var nav = xDoc.CreateNavigator();
//Goes to root
nav.MoveToFirstChild();
//Goes to first elements
nav.MoveToFirstChild();

//Goes to first elements in node - can be recursive
nav.MoveToFirstChild();
do
{
    //For inner object better in recursive function if(nav.HasChildren) nav.MoveToFirstChild()
    //Be carefull to check if children is only the text of element
    var name = nav.GetAttribute("name","");
    var val = nav.Value;
} while (nav.MoveToNext());

答案 1 :(得分:0)

您可以使用.NET的XmlReader

中的System.Xml对象

所以你可以做点什么

string xmlString = File.ReadAllText(C:\Some\Directory\File.xml);
XmlReader rdr = XmlReader.Create(new StringReader(xmlString));
reader.ReadToFollowing("field");

然后只需比较属性并将每个属性的值放在变量或数组中,具体取决于您将如何实现XmlReader

您可以从here

了解更多信息

答案 2 :(得分:0)

抱歉,我以前的帖子不准确&amp;没有必要这么复杂。

这是更简单的XLINQ版本:

void Main()
{
    var xml = @"<root>
      <object type=""Item"">
          <field name=""id"">12345</field>
          <field name=""name"">Item Name</field>
          <field name=""description"">Item Description</field>
          <field name=""Image"">
               <object type=""Graphic"">
                    <field name=""format"">PNG</field>
                    <field name=""width"">100</field>
                    <field name=""height"">200</field>
               </object>
          </field>
      </object>
    </root>";

    var rdr = new StringReader(xml);
    var elem = XElement.Load(rdr);
    var result = elem.Descendants("field").Select(e => 
        new Tuple<string, string>(e.Attribute("name").Value, e.Value)).ToList();
}

结果:

enter image description here