2014-10-28 83 views
0

我正在從csv文件中讀取數據,並使用C#中的XmlSerializer將數據傳輸到xml文件。但現在我面臨着根元素中命名空間的問題。我需要xml採用以下格式。如何處理根元素中的命名空間

<?xml version="1.0" encoding="ASCII"?> 
<abc:Country xmi:version="2.0" 
      xmlns:xmi="http://www.omg.org/XMI" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:abc="some url"> 
<Person></Person> 
</abc:Country> 

但我得到我的輸出格式爲:

<?xml version="1.0" encoding="ASCII"?> 
<Country xmi:version="2.0" 
     xmlns:xmi="http://www.omg.org/XMI" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<Person></Person> 
</Country> 

我想ABC的命名空間包含在根,然後還有「ABC」應該前綴只是我的根元素,即「國家」。我嘗試過使用在線提到的各種選項,但其中沒有一個真正爲我工作。當我使用XmlSerializerNamespaces並重載我的Serialiser類時,所有的opther命名空間都消失了。所以你能讓我知道我該如何實現這一點。

回答

0

使用XmlSerializer很重要嗎?這種事情對於XDocument來說很容易。事情是這樣的:

var document = new XDocument(); 
XNamespace abcns = "http://some/url/abc"; 
XNamespace xmins = "http://www.omg.org/XMI"; 
XNamespace xsins = "http://www.w3.org/2001/XMLSchema-instance"; 


var element = new XElement(abcns + "Country", 
    new XAttribute(XNamespace.Xmlns + "abc", abcns), 
    new XAttribute(XNamespace.Xmlns + "xmi", xmins), 
    new XAttribute(XNamespace.Xmlns + "xsi", xsins), 
    new XAttribute(xmins + "version", "2.0"), 
    new XElement("Person")); 
document.Add(element); 
+0

是的使用XmlSerializer使我的XML結構變得簡單..我能夠找出使用XmlSerializer的命名空間 – Valla 2014-10-28 18:47:05

+0

我不確定我是否遵循或同意你的邏輯,即XML結構應該是決定哪種格式你用。正如您在上面看到的,對於XDocument,相同的結構也相對簡單,但每種方法都有其他優缺點。無論哪種方式,很高興你知道了。 – 2014-10-28 18:57:23

0

我們可以使用以下方法來包括在XML的根元素多個命名空間:

XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); 
      ns.Add("xmi", "http://www.omg.org/XMI"); 
      ns.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
      ns.Add("abc", "some url"); 

XmlSerializer serializer = new XmlSerializer(typeof(Country)); 
TextWriter textWriter = new StreamWriter(@"C:\test.xml", true, Encoding.ASCII); 
       serializer.Serialize(textWriter, country, ns); 

「國家」是,你將創建該類的對象「國家」(你的xml的根元素)。

相關問題