2012-08-02 3 views
2

Linq를 Xsd로 수정하여 여러 개의 파생 된 비 추상적 유형이있는 글로벌 추상 복합 유형의 요소 배열을 올바르게 처리해야합니다. xsi 네임 스페이스를 추가하거나 파생 형식으로 요소를 마크 업하지 않습니다. 하지만 먼저 다음 작업을 수행하는 방법을 배워야합니다.C# 및 XDocument를 사용하여 일부 XML에 xsi 특성을 추가하는 방법은 무엇입니까?

C# 및 XDocument를 사용하여 xsi 네임 스페이스 및 특성을 다음 xml에 추가하려면 어떻게해야합니까? 내가 가지고있는,하지만 이것이 내가해야 할 것입니다

<?xml version="1.0" encoding="utf-8"?> 
<Form> 
    <References> 
    <ReferenceID>0</ReferenceID> 
    <ReferenceType>string</ReferenceType> 
    <PermitNumber>string</PermitNumber> 
    </References> 
    <References> 
    <ReferenceID>0</ReferenceID> 
    <ReferenceType>string</ReferenceType> 
    <CaseNumber>string</CaseNumber> 
    </References> 
</Form> 

:

<?xml version="1.0" encoding="UTF-8"?> 
<Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <References xsi:type="Permit"> 
     <ReferenceID>0</ReferenceID> 
     <ReferenceType>String</ReferenceType> 
     <PermitNumber>String</PermitNumber> 
    </References> 
    <References xsi:type="Case"> 
     <ReferenceID>0</ReferenceID> 
     <ReferenceType>String</ReferenceType> 
     <CaseNumber>String</CaseNumber> 
    </References> 
</Form> 

감사합니다,

제임스.

답변

4

그냥 같이 XAttribute를 사용

var xml = XDocument.Load("original.xml"); 

XNamespace ns = "http://www.w3.org/2001/XMLSchema-instance"; 
var formNode = xml.Element("Form"); 
formNode.Add(new XAttribute(XNamespace.Xmlns + "xsi", ns)); 

var refs = formNode.Elements("References").ToList(); 
refs[0].Add(new XAttribute(ns + "type", "Permit")); 
refs[1].Add(new XAttribute(ns + "type", "Case")); 

string target = xml.ToString(); 
+0

덕분에, 지금은 XSD에 Linq를 해킹하기 만하면 모두가 그 해킹 수 있도록 ("original.xml"파일은 첫 번째 XML을 포함) 암호! :) – RoboJ1M