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