Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

黄舟
黄舟Original
2017-03-07 16:55:371456Durchsuche

1. LINQ to XML-Klasse

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

Der folgende Code zeigt, wie LINQ verwendet wird zu XML, um schnell eine XML zu erstellen:


Zeilennummern ausblenden Code kopieren ? XML erstellen

public static void CreateDocument()
{
    string path = @"d:\website";

    XDocument xdoc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
                                   new XElement("Root", "root"));

    xdoc.Save(path);
}

Wenn Sie dieses Beispiel ausführen, erhalten Sie eine XML-Datei mit folgendem Inhalt:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>root</Root>

2. XElement-Klasse

Das XElement Die Klasse ist eine der Grundklassen in LINQ to XML. Es stellt ein XML-Element dar. Sie können diese Klasse verwenden, um den Inhalt des Elements zu ändern, untergeordnete Elemente hinzuzufügen, zu ändern oder zu löschen oder den Inhalt des Elements im Textformat zu serialisieren. Es interagiert auch mit anderen Klassen in System.Xml, z. B. XmlReader, XmlWriter und XslCompiledTransform.

Es gibt viele Möglichkeiten, XML-Dokumente mit LINQ to XML zu erstellen. Die spezifische zu verwendende Methode hängt von den tatsächlichen Anforderungen ab. Die einfachste und gebräuchlichste Methode zum Erstellen von XML-Dokumenten ist die Verwendung der XElement-Klasse. Der folgende Code zeigt, wie man mit dem ein XML-Dokument erstellt

Dies ist ein Stück Programmcode. Wenn Sie dieses Beispiel ausführen, erhalten Sie eine XML-Datei mit folgendem Inhalt:

Die XElement-Klasse enthält viele Methoden. Diese Methoden ermöglichen die Verarbeitung xml ein Kinderspiel. Informationen zu diesen Methoden finden Sie im MSDN.
public static void CreateCategories()
{
    string path = @"d:\website";

    XElement root = new XElement("Categories",

        new XElement("Category",

            new XElement("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Beverages")
            ),

        new XElement("Category",

            new XElement("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Condiments")

            ),

        new XElement("Category",

            new XElement("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Confections")

            )

       );

    root.Save(path);

}

Unter diesen sind die Methoden Save, CreateReader, ToString und WriteTo die drei am häufigsten verwendeten Methoden:

<?xml version="1.0" encoding="utf-8"?>
<Categories>
  <Category>
    <CategoryID>57485174-46fc-4e8c-8d98-d25b53d504a1</CategoryID>
    <CategoryName>Beverages</CategoryName>
  </Category>
  <Category>
    <CategoryID>1474dde1-8014-48f7-b093-b47ca5d5b770</CategoryID>
    <CategoryName>Condiments</CategoryName>
  </Category>
  <Category>
    <CategoryID>364224e0-e002-4939-90fc-0fd93e0cf35b</CategoryID>
    <CategoryName>Confections</CategoryName>
  </Category>
</Categories>


3 Klasse

Die XAttribute-Klasse wird zum Verarbeiten der Attribute von Elementen verwendet. Attribute sind „Name-Wert“-Paare, die Elementen zugeordnet sind. Jedes Element kann keine Attribute mit wiederholten Namen haben. Die Verwendung der XAttribute-Klasse ist der Verwendung der XElement-Klasse sehr ähnlich. Das folgende Beispiel zeigt, wie man einem XML-Baum beim Erstellen ein Attribut hinzufügt:

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

Zeilennummer anzeigen

Code kopieren

?

Dies ist ein Stück Programmcode. Wenn Sie dieses Beispiel ausführen, erhalten Sie eine XML-Datei mit folgendem Inhalt: Die XAttribute-Klasse verfügt über relativ wenige Methoden:

public static XElement CreateCategoriesByXAttribute()
{
    XElement root = new XElement("Categories",

        new XElement("Category",

            new XAttribute("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Beverages")

            ),

        new XElement("Category",

            new XAttribute("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Condiments")

            ),

        new XElement("Category",

            new XAttribute("CategoryID", Guid.NewGuid()),

            new XElement("CategoryName", "Confections")

            )
       );

    root.Save(path);

    return root;
}

Das folgende Beispiel verwendet Remove, um das CategoryID-Attribut des ersten Elements zu löschen:

<?xml version="1.0" encoding="utf-8"?>
<Categories>
  <Category CategoryID="a6d5ef04-3f83-4e00-aeaf-52444add7570">
    <CategoryName>Beverages</CategoryName>
  </Category>
  <Category CategoryID="67a168d5-6b22-4d82-9bd4-67bec88c2ccb">
    <CategoryName>Condiments</CategoryName>
  </Category>
  <Category CategoryID="17398f4e-5ef1-48da-8a72-1c54371b8e76">
    <CategoryName>Confections</CategoryName>
  </Category>
</Categories>

Zeilennummer anzeigen

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-ProgrammierungCode kopieren

?

Dies ist ein Stück Programmcode. Die Ausführung dieses Beispiels führt zu einer XML-Datei mit folgendem Inhalt: Versuchen Sie versuchsweise die folgende Methode zum Löschen von Attributen:

public static void RemoveAttribute()
{

    XElement xdoc = CreateCategoriesByXAttribute();

    XAttribute xattr = xdoc.Element("Category").Attribute("CategoryID");

    xattr.Remove();

    xdoc.Save(path);

}
Beim Ausführen dieses Beispiels wird eine Nullreferenzausnahme ausgelöst, da das Kategorienelement kein Attribut namens CategoryID hat.


4. Ein XDocument-Objekt kann Folgendes enthalten:

<?xml version="1.0" encoding="utf-8"?>
<Categories>
  <Category>
    <CategoryName>Beverages</CategoryName>
  </Category>
  <Category CategoryID="5c311c1e-ede5-41e5-93f7-5d8b1d7a0346">
    <CategoryName>Condiments</CategoryName>
  </Category>
  <Category CategoryID="bfde8db5-df84-4415-b297-cd04d8db9712">
    <CategoryName>Confections</CategoryName>
  </Category>
</Categories>

public static void RemoveAttributeByDoc()
{

    XElement xdoc = CreateCategoriesByXAttribute();

    XAttribute xattr = xdoc.Attribute("CategoryID");

    xattr.Remove();

    xdoc.Save(path);

}
Das folgende Beispiel erstellt ein einfaches XML-Dokument, das mehrere Elemente und ein Attribut sowie eine Verarbeitungsanweisung und einige Kommentare enthält :

Wenn Sie dieses Beispiel ausführen, erhalten Sie eine XML-Datei mit folgendem Inhalt:

Die XDocument-Klasse enthält mehrere XElement-Klassen. Bitte dieselbe Methode Weitere Informationen finden Sie im MSDN. Es ist zu beachten, dass die meisten Funktionen zur Verarbeitung von Knoten und Elementen über XElement abgerufen werden können. Die Verwendung der XDocument-Klasse ist nur dann erforderlich, wenn Verarbeitungsfunktionen auf Dokumentebene unbedingt erforderlich sind und wenn Zugriff auf Anmerkungen, Verarbeitungsanweisungen und Deklarationen erforderlich ist . Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

Nachdem Sie ein XML-Dokument erstellt haben, können Sie die NodesAfterSelf-Methode verwenden, um alle Geschwisterelemente nach dem angegebenen XElement-Element zurückzugeben. Es ist zu beachten, dass diese Methode nur Geschwisterelemente in der Sammlung zurückgibt, keine Nachkommen. Diese Methode verwendet eine verzögerte Ausführung. Der folgende Code demonstriert diesen Vorgang:

public static void CreateXDocument()
      {

          XDocument xdoc = new XDocument(

                  new XProcessingInstruction("xml-stylesheet", "title=&#39;EmpInfo&#39;"),

                  new XComment("some comments"),

                  new XElement("Root",

                          new XElement("Employees",

                                  new XElement("Employee",

                                          new XAttribute("id", "1"),

                                          new XElement("Name", "Scott Klein"),

                                          new XElement("Title", "Geek"),

                                          new XElement("HireDate", "02/05/2007"),

                                          new XElement("Gender", "M")

                                      )

                              )

                      ),

                  new XComment("more comments")

              );

          xdoc.Save(path);

      }

Zeilennummer anzeigen

Code kopieren

?
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet title=&#39;EmpInfo&#39;?>
<!--some comments-->
<Root>
  <Employees>
    <Employee id="1">
      <Name>Scott Klein</Name>
      <Title>Geek</Title>
      <HireDate>02/05/2007</HireDate>
      <Gender>M</Gender>
    </Employee>
  </Employees>
</Root>
<!--more comments-->

Dies ist ein Stück Programmcode.

2. LINQ to XML-Programmierkonzepte In diesem Abschnitt werden die zugehörigen Konzepte der LINQ to XML-Programmierung vorgestellt, beispielsweise wie um XML zu laden, neues XML zu erstellen, XML-Informationen zu bearbeiten und XML-Dokumente zu durchlaufen.

1、加载已有的xml

使用LINQ to XML加载xml可以从多种数据源获得,例如字符串、XmlReader、TextReader或文件。

下面的示例演示了如何从文件中加载xml:

public static void LoadFromFile()
{

    XElement root = XElement.Load(path);

    Console.WriteLi


也可以使用Parse方法从一个字符串加载xml:

public static void LoadFromString()
    {

        XElement root = XElement.Parse(@"

    <Categories>

      <Category>

        <CategoryID>1</CategoryID>

        <CategoryName>Beverages</CategoryName>

        <Description>Soft drinks, coffees, teas, beers, and ales</Description>

      </Category>

    </Categories>

");

        Console.WriteLine(root.ToString());

    }

2、保存xml

在前面的示例中曾多次调用XElement对象的Save方法来保存xml文档,在这里就不冗述了。

3、创建xml

在前面的示例中曾多次调用XElement对象的构造函数来创建xml文档,在这里就不冗述了。需要说明的是,在使用LINQ to XML创建xml文档时,会有代码缩进,这使代码的可读性大大加强。

4、遍历xml

使用LINQ to XML在xml树中遍历xml是相当简单的。只需要使用XElement和XAttribute类中所提供的方法。Elements和Element方法提供了定位到某个或某些元素的方式。下面的示例演示了如何遍历xml树,并获取指定元素的方式:

public static void Enum()

{

    XElement root = new XElement("Categories");

    using (NorthwindDataContext db = new NorthwindDataContext())

    {

        root.Add(

                db.Categories

                .Select

                (

                    c => new XElement

                    (

                        "Category"

                        , new XElement("CategoryName", c.CategoryName)

                    )

                )

            );

    }

    foreach (var item in root.Elements("Category"))
    {
        Console.WriteLine(item.Element("CategoryName").Value);

    }

}

上述代码运行的结果为:

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung 

是不是很简单呢?Nodes()、Elements()、Element(name)和Elements(name)方法为xml树的导航提供了基本功能。

5、操纵xml

LINQ to XML一个重要的特性是能够方便地修改xml树,如添加、删除、更新和复制xml文档的内容。

I.插入

使用XNode类的插入方法可以方便地向xml树添加内容:

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

在下面的示例中,使用AddAfterSelf方法向现有xml中添加一个新节点:

public static void AddAfterSelf()

{

    XElement root = XElement.Parse(@"

        <Categories>

          <Category>

            <CategoryID>1</CategoryID>

            <CategoryName>Beverages</CategoryName>

            <Description>Soft drinks, coffees, teas, beers, and ales</Description>

          </Category>

        </Categories>

    ");

    XElement xele = root.Element("Category").Element("CategoryName");

    xele.AddAfterSelf(new XElement("AddDate", DateTime.Now));

    root.Save(path);

}

运行该示例将会得到一个xml文件,其内容为:

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

<Categories>

  <Category>

    <CategoryID>1</CategoryID>

    <CategoryName>Beverages</CategoryName>

    <AddDate>2010-01-31T03:08:51.813736+08:00</AddDate>

    <Description>Soft drinks, coffees, teas, beers, and ales</Description>

  </Category>

</Categories>

当需要添加一个元素到指定节点之前时,可以使用AddBeforeSelf方法。

 

II.更新

在LINQ to XML中更新xml内容可以使用以下几种方法:

Detaillierte Einführung in Grafikcode basierend auf LINQ to XML-Programmierung

在下面的示例中使用了ReplaceWith与SetElementValue方法对xml进行了更新操作:

public static void Update()
{

    XElement root = XElement.Parse(@"
                                   <Categories>
                                      <Category>
                                        <CategoryID>1</CategoryID>
                                        <CategoryName>Beverages</CategoryName>
                                        <Description>Soft drinks, coffees, teas, beers, and ales</Description>
                                      </Category>
                                    </Categories>
                                  ");

    root.Element("Category").Element("CategoryID").ReplaceWith(new XElement("ID", "2"));
    root.Element("Category").SetElementValue("CategoryName", "test data");
    root.Save(path);
}

运行该示例将会得到一个xml文件,其内容为:

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

<Categories>

  <Category>

    <ID>2</ID>

    <CategoryName>test data</CategoryName>

    <Description>Soft drinks, coffees, teas, beers, and ales</Description>

  </Category>

</Categories>

III.删除

可以使用Remove(XElement)与RemoveAll方法来删除xml。

在下面的示例中,使用了RemoveAll方法:

}
  public static void Remove()
  {
      string path = @"d:\";

      XElement root = XElement.Parse(@"
                                  <Categories>

                                    <Category>

                                      <CategoryID>1</CategoryID>

                                      <CategoryName>Beverages</CategoryName>

                                      <Description>Soft drinks, coffees, teas, beers, and ales</Description>

                                    </Category>

                                  </Categories>

                                ");

      root.RemoveAll();

      root.Save(path);

  }

运行该示例将会得到一个xml文件,其内容为:

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

<Categories />

在下面的示例中,使用了Remove方法删除了xml的Description元素:

public static void Remove()
{

    XElement root = XElement.Parse(@"
                                <Categories>
                                  <Category>
                                    <CategoryID>1</CategoryID>
                                    <CategoryName>Beverages</CategoryName>
                                    <Description>Soft drinks, coffees, teas, beers, and ales</Description>
                                  </Category>
                                </Categories>
                                ");

    root.Element("Category").Element("Description").Remove();
    root.Save(path);
}

运行该示例将会得到一个xml文件,其内容为:

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

<Categories>

  <Category>

    <CategoryID>1</CategoryID>

    <CategoryName>Beverages</CategoryName>

  </Category>

</Categories>

 

6、处理属性

I.添加

LINQ to XML添加属性与添加元素师类似的,可以使用构造函数或者Add方法来添加属性:

public static void AddAttribute()
{
    XElement root = new XElement("Categories",
        new XElement("Category",
            new XAttribute("CategoryID", "1"),
            new XElement("CategoryName", "Beverages"),
            new XElement("Description", "Soft drinks, coffees, teas, beers, and ales")
        )
    );

    root.Element("Category").Add(new XAttribute("AddDate", DateTime.Now.ToShortDateString()));
    root.Save(path);
}

运行该示例将会得到一个xml文件,其内容为:

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

<Categories>

  <Category CategoryID="1" AddDate="2010-01-31">

    <CategoryName>Beverages</CategoryName>

    <Description>Soft drinks, coffees, teas, beers, and ales</Description>

  </Category>

</Categories>

II.检索

检索属性可以使用Attribute(name)方法:

显示行号 复制代码 这是一段程序代码。

public static void SelectAttribute()
{
    XElement root = new XElement("Categories",
        new XElement("Category",
            new XAttribute("CategoryID", "1"),
            new XElement("CategoryName", "Beverages"),
            new XElement("Description", "Soft drinks, coffees, teas, beers, and ales")
        )
    );

    XAttribute xattr = root.Element("Category").Attribute("CategoryID");
    Console.WriteLine(xattr.Name);
    Console.WriteLine(xattr.Value);
}

上述代码的运行结果为:

CategoryID
1

本文总结

本文介绍了LINQ to XML的编程基础,即System.Xml.Linq命名空间中的多个LINQ to XML类,这些类都是LINQ to XML的支持类,它们使得处理xml比使用其他的xml工具容易得多。在本文中,着重介绍的是XElement、XAttribute和XDocument。 

 以上就是LINQ to XML 编程基础的图文代码详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn