내 경우는 여기에 있습니다.문자열에서 XElement의 요소를 업데이트/대체하려면 어떻게해야합니까?
저는 XElement를 가지고 있습니다. 자손이있는 자손이있는 루트라고 부르 자. LINQ to XML을 사용하여 자손을 당겨 .ToString()
을 사용하여 메모 편집기에로드하고 편집합니다. 이제 원래의 하위 요소를 편집 된 버전으로 업데이트/대체하려고합니다.
이 파일은 스키마가없고 DOM을 사용하지 않는 간단한 XML 파일입니다. 요소를 편집하고 업데이트/대체 할 수 있어야합니다.
<Root>
<Genre Name="Rock">
<Artist Name="Pink Floyd">
<BandMembers>
<Member>Nick Mason</Member>
<Member>Syd Barret</Member>
<Member>David Gilmour</Member>
<Member>Roger Water</Member>
<Member>Richard Wright</Member>
</BandMembers>
<Category>Favorite band of all time</Category>
</Artist>
<Artist Name="Led Zepelin">
<Category>Love the band</Category>
</Artist>
</Genre>
<Genre Name="Blues">
<Artist Name="Muddy Waters">
<Instrument>Harmonica</Instrument>
</Artist>
<Artist Name="Howling Wolf">
<Instrument>Guitar</Instrument>
</Artist>
</Genre>
</Root>
가 지금은 로저 워터스 '성을 해결하기 위해'핑크 플로이드 (Pink Floyd) "요소를 편집 할 말 :
여기 내 XML의 모형입니다. 그 요소를 가져 와서 문자열로 변환하고, 편집기로로드하고, 원하는대로 변경하고, .Parse()
을 사용하여 XElement로 다시 변환합니다.
이제 원래의 XML에서 "Pink Floyd"노드를 업데이트하거나 바꿀 수 있습니까?
// input would be your edited XML, this is just sample data to illustrate
string input = @"<Artist Name=""Pink Floyd"">
<BandMembers>
<Member>Nick Mason</Member>
<Member>Syd Barret</Member>
<Member>David Gilmour</Member>
<Member>Roger Waters</Member>
<Member>Richard Wright</Member>
</BandMembers>
<Category>Favorite band of all time</Category>
</Artist>";
var replacement = XElement.Parse(input);
var pinkFloyd = xml.Elements("Genre")
.Where(e => e.Attribute("Name").Value == "Rock")
.Elements("Artist")
.Single(e => e.Attribute("Name").Value == "Pink Floyd");
pinkFloyd.ReplaceWith(replacement);
Console.WriteLine(xml);
당신은 몇 가지 오류가 있지만 검사를 추가해야합니다 :
일치하지 않는 이름과 누락 된 항목이 있으므로 XML을 업데이트했습니다. 이것은 유효한 구조이지만 여전히 일관성이 없으며 장르 밖에서 일어나는 예술가들과도 같습니다. –
나는 BLOOD 태그 안에 Muddy와 Howling을 넣기 위해 XML을 업데이트했다. 이제 그들은 집에있어! ;) –
pmartin
죄송합니다. 바로 XML을 자유롭게 사용하기 위해서입니다. =) –