Szukaj…


Wygeneruj dokument XML

Celem jest wygenerowanie następującego dokumentu XML:

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

Kod:

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);

Zmodyfikuj plik XML

Aby zmodyfikować plik XML za pomocą XDocument , załaduj plik do zmiennej typu XDocument , zmodyfikuj go w pamięci, a następnie zapisz, zastępując oryginalny plik. Częstym błędem jest modyfikacja pliku XML w pamięci i oczekiwanie zmiany pliku na dysku.

Biorąc pod uwagę plik XML:

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

Chcesz zmienić kolor banana na brązowy:

  1. Musimy znać ścieżkę do pliku na dysku.
  2. Jedno przeciążenie XDocument.Load otrzymuje URI (ścieżkę pliku).
  3. Ponieważ plik xml używa przestrzeni nazw, musimy wykonać zapytanie o przestrzeń nazw AND nazwa elementu.
  4. Kwerenda Linq wykorzystująca składnię C # 6 w celu dostosowania do możliwości wartości pustych. Każda . użyte w tym zapytaniu może zwrócić zestaw zerowy, jeśli warunek nie znajdzie żadnych elementów. Przed C # 6 zrobiłbyś to w kilku krokach, sprawdzając po drodze wartość null. Rezultatem jest element <Fruit> zawierający banan. Właściwie IEnumerable<XElement> , dlatego w następnym kroku użyto FirstOfDefault() .
  5. Teraz wydobywamy element FruitColor z właśnie znalezionego elementu Fruit. Zakładamy, że jest tylko jeden, lub zależy nam tylko na pierwszym.
  6. Jeśli nie ma wartości null, ustawiamy FruitColor na „Brown”.
  7. Na koniec zapisujemy XDocument , nadpisując oryginalny plik na dysku.
// 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);

Plik wygląda teraz tak:

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

Wygeneruj dokument XML przy użyciu płynnej składni

Cel:

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

Kod:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow