如何在XML中获取文本和属性值 [英] How can I get text and attributes values in my XML

查看:57
本文介绍了如何在XML中获取文本和属性值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

XML示例:

<?xml version="1.0" encoding="utf-8" ?>
<brand name="brand1" num_brand="118" enabled="True">
  <price>
    <nodePattern>pattern</nodePattern>
    <attribute type="text" ></attribute>
    <treatment enabled="1" type="Regex">reg</treatment>
  </price>
  <title>
    <nodePattern>pattern</nodePattern>
    <attribute type="text" ></attribute>
    <treatment enabled="1" type="Regex">reg</treatment>
  </title>
</brand>

请问,如何使用System.Xml.Linq为所有不同节点(例如,名称,num_brand和启用品牌,启用,类型和"reg")获取所有属性的不同属性值和文本?

谢谢!

解决方案

System.Xml.Linq命名空间比System.Xml命名空间好得多.您的XDocument有一个XElement,而后者又有子元素.每个元素都有属性和一个值.

这是给你的例子:

var text = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
            <brand name=""brand1"" num_brand=""118"" enabled=""True"">
                <price>
                <nodePattern>pattern</nodePattern>
                <attribute type=""text"" ></attribute>
                <treatment enabled=""1"" type=""Regex"">reg</treatment>
                </price>
                <title>
                <nodePattern>pattern</nodePattern>
                <attribute type=""text"" ></attribute>
                <treatment enabled=""1"" type=""Regex"">reg</treatment>
                </title>
            </brand>";

XDocument document = XDocument.Parse(text);

// one root element - "brand"          
System.Diagnostics.Debug.Assert(document.Elements().Count() == 1);
XElement brand = document.Element("brand");

// brand has two children - price and title           
foreach (var element in brand.Elements())
    Console.WriteLine("element name: " + element.Name);

// brand has three attributes
foreach (var attr in brand.Attributes())
    Console.WriteLine("attribute name: " + attr.Name + ", value: " + attr.Value);

XML example :

<?xml version="1.0" encoding="utf-8" ?>
<brand name="brand1" num_brand="118" enabled="True">
  <price>
    <nodePattern>pattern</nodePattern>
    <attribute type="text" ></attribute>
    <treatment enabled="1" type="Regex">reg</treatment>
  </price>
  <title>
    <nodePattern>pattern</nodePattern>
    <attribute type="text" ></attribute>
    <treatment enabled="1" type="Regex">reg</treatment>
  </title>
</brand>

Please, how can I get the different attributes values and text for all my different nodes (for example name, num_brand and enabled for brand, enabled, type and "reg" for treatment) using System.Xml.Linq ?

Thank you !

解决方案

The System.Xml.Linq namespace is much nicer than the System.Xml namespace. Your XDocument has one XElement, which in turn has children elements. Each element has attributes and a value.

Here's an example for you:

var text = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
            <brand name=""brand1"" num_brand=""118"" enabled=""True"">
                <price>
                <nodePattern>pattern</nodePattern>
                <attribute type=""text"" ></attribute>
                <treatment enabled=""1"" type=""Regex"">reg</treatment>
                </price>
                <title>
                <nodePattern>pattern</nodePattern>
                <attribute type=""text"" ></attribute>
                <treatment enabled=""1"" type=""Regex"">reg</treatment>
                </title>
            </brand>";

XDocument document = XDocument.Parse(text);

// one root element - "brand"          
System.Diagnostics.Debug.Assert(document.Elements().Count() == 1);
XElement brand = document.Element("brand");

// brand has two children - price and title           
foreach (var element in brand.Elements())
    Console.WriteLine("element name: " + element.Name);

// brand has three attributes
foreach (var attr in brand.Attributes())
    Console.WriteLine("attribute name: " + attr.Name + ", value: " + attr.Value);

这篇关于如何在XML中获取文本和属性值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆