代码之家  ›  专栏  ›  技术社区  ›  gmmo

用xdocument解析XML文档

  •  0
  • gmmo  · 技术社区  · 6 年前

    我试图使用xdocument解析这个XML文档,但不理解如何从xdocument的内部螺栓中提取数据。

    节点如下:

    <data name="GetOrdersMailMsg" xml:space="preserve">
    <value>
            SELECT Orders.buyersEmail,
                Orders.emailMessage
                FROM Orders
                WHERE Orders.orderId = '{0}'
        </value>
    <comment>Get email message(s) to buyer</comment>
    </data>
    <data name="UpdateOrdersMailMsg" xml:space="preserve">
    <value>
            UPDATE Orders
                SET    Orders.buyersEmail = '{0}',
                        Orders.emailMessage = '{1}'
                WHERE Orders.orderId = '{2}'
        </value>
    <comment>Update mail message to buyer</comment>
    </data>
    

    我需要每个节点的“值”、“注释”和“数据名称”。我正在尝试下面的代码:

                    xdoc = XDocument.Load(xmlFile);
    
                    //Get all nodes
                    List<XNode> xNodes = xdoc.DescendantNodes().ToList();
                    foreach (XNode node in xNodes)
                    {
                        XElement element = node as XElement;
    
                        if (null != element)
                        {
                            //For each orderProperty, get all attributes
                            foreach (XAttribute attribute in element.Attributes())
                            {
                                string name = attribute.Name.ToString();
                                string value = attribute.Value.ToString();
    
                                Debug.WriteLine("name:" + name);
                                Debug.WriteLine("value:" + value);
                            }
                        }
                    }
    

    但它并没有给我想要的。有人能告诉我如何获取我需要的数据吗?

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  0
  •   sticky bit    6 年前

    XML缺少根,因此实际上没有XML。但我想你只是没贴出来。

    你可以用 Elements() 在根元素上搜索调用的所有元素 data . 从他们那里你可以得到 name 属性 Attribute() 以及 value 元素 Element() .

    foreach (XElement xElement in xDocument.Root.Elements("data"))
    {
        Debug.WriteLine("name:" + xElement.Attribute("name").Value.ToString());
        Debug.WriteLine("value:" + xElement.Element("value").Value.ToString());
    }
    

    .NET Fiddle