2016-02-18 64 views
1

Visual Studio 2015(C#,WinForms)我怎样才能拉这样的XML文件设置的值?

我似乎无法找到一个体面的教程或例子如何从这些奇怪的标签拉数据。他们中的大多数只具有简单标签之间的值。是否有捷径可寻?

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> 

我怎样才能弹出的每个节点的值,并把它们放到每个文本框?

回答

1

您可以使用XPathNavigator。 装载XML到一个XmlDocument的一个然后创建的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()); 
+0

完美工作的第一个项目,我会用一些这方面发挥明天看看,如果我不能得到它将列表中的每个项目与其子对象(图像)一起拉出。谢谢! – K0D3R

0

可以使用XmlReader对象从System.Xml包的.NET

所以,你可以这样做

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

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

您可以阅读here

0

对不起多,我以前的帖子是不准确的&并不需要那么复杂。

下面是简单的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