수색…


XML 문서 생성

목표는 다음 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>

암호:

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 파일 수정

XML 파일을 수정하려면 XDocument , 당신은 형의 변수에 파일을로드 XDocument 후 원본 파일을 덮어 쓰기, 저장, 메모리에 수정합니다. 일반적인 실수는 메모리의 XML을 수정하고 디스크의 파일이 변경 될 것으로 예상하는 것입니다.

주어진 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>

바나나의 색을 갈색으로 변경하고 싶습니다 :

  1. 디스크의 파일 경로를 알아야합니다.
  2. XDocument.Load 한 오버로드는 URI (파일 경로)를받습니다.
  3. xml 파일은 네임 스페이스를 사용하기 때문에 네임 스페이스 AND 요소 이름을 사용하여 쿼리해야합니다.
  4. null 값의 가능성을 수용하기 위해 C # 6 구문을 사용하는 Linq 쿼리. 모두 . 조건에 요소가없는 경우이 쿼리에 사용 된 가능성은 null 집합을 반환 할 수 있습니다. C # 6 이전에는 여러 단계로이 작업을 수행하면서 길을 따라 null을 확인했습니다. 결과는 바나나를 포함하는 <Fruit> 요소입니다. 실제로 IEnumerable<XElement> 는 다음 단계에서 FirstOfDefault() 사용하는 이유입니다.
  5. 이제 우리가 찾은 과일 요소에서 FruitColor 요소를 추출합니다. 여기서 우리는 하나만 있다고 가정합니다. 아니면 첫 번째 것에 대해서만 신경 씁니다.
  6. null가 아닌 경우, FruitColor를 "Brown"로 설정합니다.
  7. 마지막으로 XDocument 저장하고 디스크에 원본 파일을 덮어 씁니다.
// 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);

이제 파일은 다음과 같습니다.

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

유창한 구문을 사용하여 XML 문서 생성

골:

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

암호:

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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow