2016-02-18 63 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