2012-08-02 88 views
2

我需要修復Linq到Xsd,以便正確處理全局抽象複雜類型的元素數組,其中有多個派生的非抽象類型。 它不會添加xsi命名空間或標記元素及其派生類型。 但首先我需要了解如何執行以下操作:使用C#和XDocument,如何將xsi屬性添加到某些Xml中?

使用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這樣的:

(「original.xml」文件包含您的第一個XML)

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

謝謝,現在我需要做的就是破解Linq到XSD,使其黑客工具,碼! :) – RoboJ1M 2012-08-03 08:10:42