2017-06-17 94 views
0

所以這裏是我的XML,並且我明白OrderDate,BuyerID和Items被稱爲childnodes,但是你怎樣調用項目中的屬性,如ItemName,Category ect ..他們仍然稱爲childnodes?如果是的話,他們應該叫什麼?XML節點命名

<?xml version="1.0" encoding="utf-8" ?> 
<OrderData > 

    <Order OrderID="OR00001"> 
     <OrderDate>26 May 2017</OrderDate> 
     <BuyerID>WCS1810001</BuyerID> 
     <Instructions>Place item carefully</Instructions> 

     <Items ItemID="IT00001"> 
     <ItemName>ASUS Monitor</ItemName> 
     <Description>Best monitor in the world</Description> 
     <Category>Monitor</Category> 
     <Quantities>100</Quantities> 
     <Manufacturer>ASUS</Manufacturer> 
     <UnitPrice>$100.00</UnitPrice> 
     </Items> 
    </Order> 
</OrderData> 
+0

這取決於你的參考點。物品是Order的孩子。 ItemName是Items的子項,是Order的後代。 – dbasnett

+0

@dbasnett嗯所以可以說,如果我試圖處理項目屬性,並通常處理子節點會是這樣的,order.BuyerID = node.ChildNodes [1] .InnerText; 。 Items屬性看起來如何? – randomstudent

+0

項目有一個屬性ItemID。這是你指的是什麼?我是VB'er,所以我不知道你會如何得到這個屬性。處理XML時,IMO VB更容易。 – dbasnett

回答

0

您擁有的唯一屬性(xml項)是您的OrderID和ItemID屬性。使用xml時,僅使用xml術語很有幫助。因此,你的XML中的所有其他內容都是**元素**。

在另一個元素下的任何元素都是該元素的子元素。

Items是Order的子元素,ItemName是Items的子元素。

+0

他們有OrderID作爲訂單FWIW的屬性。 – dbasnett

0

爲什麼MS沒有添加到C#中超出了我。 VB似乎更適合使用XML恕我直言。

Dim xe As XElement 
    ' to load from a file 
    ' Dim yourpath As String = "your path here" 
    'xe = XElement.Load(yourpath) 

    ' for testing 
    xe = <OrderData> 
      <Order OrderID="OR00001"> 
       <OrderDate>26 May 2017</OrderDate> 
       <BuyerID>WCS1810001</BuyerID> 
       <Instructions>Place item carefully</Instructions> 
       <Items ItemID="IT00001"> 
        <ItemName>ASUS Monitor</ItemName> 
        <Description>Best monitor in the world</Description> 
        <Category>Monitor</Category> 
        <Quantities>100</Quantities> 
        <Manufacturer>ASUS</Manufacturer> 
        <UnitPrice>$100.00</UnitPrice> 
       </Items> 
      </Order> 
     </OrderData> 

    Dim item As XElement 
    'this does not find an item 
    item = (From el In xe...<Items> 
      Where [email protected] = "IT" 
      Select el).FirstOrDefault 

    If item Is Nothing Then Stop 

    'this finds the item 
    item = (From el In xe...<Items> 
      Where [email protected] = "IT00001" 
      Select el).FirstOrDefault 

    'add a new item to the order. an item prototype 
    Dim itmProto As XElement = <Items ItemID=""> 
            <ItemName></ItemName> 
            <Description></Description> 
            <Category></Category> 
            <Quantities></Quantities> 
            <Manufacturer></Manufacturer> 
            <UnitPrice></UnitPrice> 
           </Items> 

    Dim newItem As New XElement(itmProto) 'note that itmProto is not used directly, only as part of New 
    [email protected] = "ITM0042" 
    newItem.<ItemName>.Value = "FOO" 
    newItem.<Description>.Value = "this is a test" 
    'etc 
    xe.<Order>.Last.Add(newItem) 'add to order 

    ' to save file 
    ' xe.Save(yourpath)