Suche…


Generieren Sie ein XML-Dokument

Ziel ist es, das folgende XML-Dokument zu generieren:

<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit ID="F0001">
    <FruitName>Banana</FruitName>
    <FruitColor>Yellow</FruitColor>
  </Fruit>
  <Fruit ID="F0002">
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>

Code:

XNamespace xns = "http://www.fruitauthority.fake";
XDeclaration xDeclaration = new XDeclaration("1.0", "utf-8", "yes");
XDocument xDoc = new XDocument(xDeclaration);
XElement xRoot = new XElement(xns + "FruitBasket");
xDoc.Add(xRoot);

XElement xelFruit1 = new XElement(xns + "Fruit");
XAttribute idAttribute1 = new XAttribute("ID", "F0001");
xelFruit1.Add(idAttribute1);
XElement xelFruitName1 = new XElement(xns + "FruitName", "Banana");
XElement xelFruitColor1 = new XElement(xns + "FruitColor", "Yellow");
xelFruit1.Add(xelFruitName1);
xelFruit1.Add(xelFruitColor1);
xRoot.Add(xelFruit1);

XElement xelFruit2 = new XElement(xns + "Fruit");
XAttribute idAttribute2 = new XAttribute("ID", "F0002");
xelFruit2.Add(idAttribute2);
XElement xelFruitName2 = new XElement(xns + "FruitName", "Apple");
XElement xelFruitColor2 = new XElement(xns + "FruitColor", "Red");
xelFruit2.Add(xelFruitName2);
xelFruit2.Add(xelFruitColor2);
xRoot.Add(xelFruit2);

XML-Datei ändern

Um eine XML-Datei mit XDocument zu ändern, laden Sie die Datei in eine Variable vom Typ XDocument , ändern sie im Speicher, speichern sie und speichern die Originaldatei. Ein häufiger Fehler besteht darin, das XML im Arbeitsspeicher zu ändern und eine Änderung der Datei auf der Festplatte zu erwarten.

Gegeben eine XML-Datei:

<?xml version="1.0" encoding="utf-8"?>
<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit>
    <FruitName>Banana</FruitName>
    <FruitColor>Yellow</FruitColor>
  </Fruit>
  <Fruit>
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>

Sie möchten die Farbe der Banana in braun ändern:

  1. Wir müssen den Pfad zur Datei auf der Festplatte kennen.
  2. Eine Überladung von XDocument.Load erhält einen URI (Dateipfad).
  3. Da die XML-Datei einen Namespace verwendet, müssen Sie den Namespace AND-Elementnamen abfragen.
  4. Eine Linq-Abfrage mit C # 6-Syntax, um die Möglichkeit von Nullwerten zu berücksichtigen. Jeder . Die in dieser Abfrage verwendete Methode kann eine Nullmenge zurückgeben, wenn die Bedingung keine Elemente findet. Vor C # 6 würden Sie dies in mehreren Schritten tun und dabei nach Null suchen. Das Ergebnis ist das <Fruit> -Element, das die Banane enthält. Eigentlich ein IEnumerable<XElement> , weshalb der nächste Schritt FirstOfDefault() .
  5. Jetzt extrahieren wir das FruitColor-Element aus dem soeben gefundenen Fruit-Element. Wir gehen davon aus, dass es nur einen gibt, oder wir kümmern uns nur um den ersten.
  6. Wenn es nicht null ist, setzen wir FruitColor auf "Brown".
  7. Zum Schluss speichern wir das XDocument und überschreiben die Originaldatei auf der Festplatte.
// 1.
string xmlFilePath = "c:\\users\\public\\fruit.xml";

// 2.
XDocument xdoc = XDocument.Load(xmlFilePath);

// 3.
XNamespace ns = "http://www.fruitauthority.fake";

//4. 
var elBanana = xdoc.Descendants()?.
    Elements(ns + "FruitName")?.
    Where(x => x.Value == "Banana")?.
    Ancestors(ns + "Fruit");

// 5.
var elColor = elBanana.Elements(ns + "FruitColor").FirstOrDefault();

// 6.
if (elColor != null)
{
    elColor.Value = "Brown";
}

// 7.
xdoc.Save(xmlFilePath);

Die Datei sieht jetzt so aus:

<?xml version="1.0" encoding="utf-8"?>
<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit>
    <FruitName>Banana</FruitName>
    <FruitColor>Brown</FruitColor>
  </Fruit>
  <Fruit>
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>

Generieren Sie ein XML-Dokument mit fließender Syntax

Tor:

<FruitBasket xmlns="http://www.fruitauthority.fake">
  <Fruit>
    <FruitName>Banana</FruitName>
    <FruitColor>Yellow</FruitColor>
  </Fruit>
  <Fruit>
    <FruitName>Apple</FruitName>
    <FruitColor>Red</FruitColor>
  </Fruit>
</FruitBasket>

Code:

XNamespace xns = "http://www.fruitauthority.fake";
XDocument xDoc = 
    new XDocument(new XDeclaration("1.0", "utf-8", "yes"),
        new XElement(xns + "FruitBasket",
            new XElement(xns + "Fruit",
                new XElement(xns + "FruitName", "Banana"),
                new XElement(xns + "FruitColor", "Yellow")),
            new XElement(xns + "Fruit",
                new XElement(xns + "FruitName", "Apple"),
                new XElement(xns + "FruitColor", "Red"))
                ));


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow