【问题标题】:XML Node namingXML Node naming
【发布时间】:2017-11-20 01:23:44
【问题描述】:

所以这是我的 XML,我知道 OrderDate、BuyerID 和 Items 称为子节点,但是您如何称呼 Items 中的属性,例如 ItemName、Category 等。它们仍然称为子节点吗?如果是的话应该叫什么?

<?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>

【问题讨论】:

  • 这取决于您的参考点。 Items 是 Order 的子级。 ItemName 是 Items 的子代,是 Order 的后代。
  • @dbasnett 嗯,如果我要尝试处理项目属性并且通常处理子节点将是这样的,order.BuyerID=node.ChildNodes[1].InnerText; . Items 属性会是什么样子?
  • Items 有一个属性,ItemID。你指的是这个吗?我是一名 VB'er,所以我不知道您将如何获得该属性。使用 XML 时,IMO VB 更容易。

标签: c# xml dom nodes


【解决方案1】:

在 xml 术语中,您拥有的唯一属性是您的 OrderID 和 ItemID 属性。使用 xml 时,只使用 xml 术语会很有帮助。因此,您的 xml 中的其他所有内容都是**元素**。

位于另一个元素下的任何元素都是该元素的子元素。

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

【讨论】:

  • 他们有一个 OrderID 作为 Order FWIW 的属性。
【解决方案2】:

为什么 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 el.@ItemID = "IT"
            Select el).FirstOrDefault

    If item Is Nothing Then Stop

    'this finds the item
    item = (From el In xe...<Items>
            Where el.@ItemID = "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
    newItem.@ItemID = "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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2014-10-12
    • 2017-01-02
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多