다음 XML 구조가 있습니다.C에서 태그 내의 속성을 사용하여 XML 생성 #
<a>
<b>
<c>
<d>54</d>
<e>US</e>
<f>Canada</f>
<g>
<h>
<i1>39</i1>
<i2>Belgium</i2>
<i3>Russia</i3>
</h>
<h>
<i1>43</i1>
<i2>Fran</i2>
<i3>Ger</i3>
</h>
</g>
</c>
<c>
<d>5</d>
<e>US</e>
<f>Can</f>
<g>
<h>
<i1>29</i1>
<i2>Brit</i2>
<i3>Ice</i3>
</h>
<h>
<i1>95</i1>
<i2>Russia</i2>
<i3>Nero</i3>
</h>
<h>
<i1>4323</i1>
<i2>Polska</i2>
<i3>503</i3>
</h>
</g>
</c>
</b>
<b2>
<c2>
<d2>551</d2>
<d3>Indo</d3>
<e2>
<f2>
<g2>Irnna</g2>
<g3>Mehak</g3>
<g4>Vodka</g4>
<h2>
<i2>
<j1>44</j1>
<j6>Germ0</j6>
</i2>
<i21>Finish</i21>
</f2>
</e2>
<f3>544</f3>
<g3>fur</g3>
<h3>denmark</h3>
<k1>lur</k1>
<k2>Bern</k2>
<k3>Zurick</k3>
<k4>Italy</k4>
</c2>
</b2>
<b3>35</b3>
<b4>ferha</b4>
<b5>english</b5>
<b6>334</b6>
</a>
나는 태그 내의 모든 속성을 넣어 의미 다음과 같은 -
<a>
<b>
<c d="54"; e="US"; f="Canada">
<g>
<h i1="39"; i2 = "Belgium"; i3 ="Russia">
<h i1="393"; i2 = "Fran"; i3 ="Ger">
</g>
</c>
<c>
.
.
.
.
처럼 변환해야합니다. 나는 다음 C# 코드를 사용했다 .-
var xDoc = XDocument.Load("my.xml");
var xNode =
new XElement("a",
from name in xDoc.Root.Elements()
select new XElement(name.Name,
from names in name.Elements()
select new XElement(names.Name,
from namesElement in names.Elements()
where namesElement.Name.LocalName != "g"
select new XAttribute(namesElement.Name.LocalName, (string)namesElement),
new XElement("g",
from Parts in names.Element("g").Elements()
select new XElement(Parts.Name,
from routeElement in Parts.Elements()
select new XAttribute(routeElement.Name.LocalName, (string)routeElement))))));
그러나 나는 오류가 발생한다. 제 코드에 무엇이 잘못 되었습니까? 힌트를 주시겠습니까? 실제로, 그것은 (상반기까지) 작동합니다. 후반부에 구조가 바뀌면 "객체 참조가 객체의 인스턴스로 설정되지 않았습니다.", "중복 속성"과 같은 오류가 표시됩니다. 제 접근 방식이 맞는지 아닌지 제발 알려주시겠습니까? 논리 구조에 문제가 있습니까?
XSLT를 통해 더 잘 처리 될 것이라고 생각합니다. – Tim
제 구조에 맞는 샘플을 좀주세요. – Imha
불행히도 그걸 알아내는 데 걸리는 시간보다 더 빠를 수는 없습니다. 10 년 전 펜으로 냅킨에 상당히 복잡한 XSLT를 할 수 있었지만 그 이후로는 사용하지 않았습니다. :/ – Tim