2012-01-12 130 views
2

我有一個DataSet,其中包含輸出(寫入)到XMl文件的數據。Dataset.WriteXml()命名空間和前綴

我添加了一個命名空間和前綴的數據集是這樣的:

public static string XmlNamespace = "http://namespace"; 
public static string XmlPrefix = "ns0"; 
RequestDataSet.Namespace = XmlNamespace; 
RequestDataSet.Prefix = XmlPrefix; 

的XML輸出如下:

<?xml version="1.0" standalone="yes"?> 
<ns0:list xmlns:ns0="http://namespace"> 
    <ns0:item xmlns="http://namespace"> 
    <data1>1234</data1> 
    <data2>91011</data2> 
    </item> 
</ns0:list> 

但它應該是這樣的:(在沒有命名空間項目記錄。只是前綴)

<?xml version="1.0" standalone="yes"?> 
<ns0:list xmlns:ns0="http://namespace"> 
    <ns0:item> 
    <data1>1234</data1> 
    <data2>91011</data2> 
    </item> 
</ns0:list> 

我曾嘗試將表前綴/命名空間設置爲空像這樣:

RequestDataSet.Tables["item"].Prefix = XmlPrefix; 
RequestDataSet.Tables["item"].Namespace = null; 

但是,這也行不通...有沒有人知道這個解決方案?

回答

0

我在與BizTalk適配器戰鬥時遇到類似的問題......但這是一個不同的故事。

不確定是否有不同的(更清潔)方式,但您可以始終「抓住」屬性並將其刪除,如描述here

有效,你會做到以下幾點:

XmlDocument xDoc = new XmlDocument(); 
    xDoc.LoadXml(xml); 
    if (xDoc.DocumentElement.Attributes.Count > 0) 
    { 
     XmlAttribute xAtt = xDoc.DocumentElement.Attributes[0]; 
     xDoc.DocumentElement.Attributes.Remove(xAtt); 
+0

可能性能方面的考慮在這裏爲好,這取決於你的XML的大小。 – Nick 2012-01-12 12:15:30

+0

我不太確定它是不同的故事,因爲我構建的xml文件將被髮送到BizTalk服務器進行處理,我的問題是BizTalk無法驗證我的xml文件,因爲它不喜歡命名空間: )我會嘗試你現在給我的解決方案!不好報告回來:) – 2012-01-12 12:25:28

+0

啊,BizTalk似乎出現在這些情況!好的,讓我知道。我們在BizTalk中的解決方案是在映射器中具有內聯函數,如果我記得正確地做了與上述類似的事情。如果這是您的選擇,可以使用映射器中的XSLT修復此問題。保持我的發佈。 – Nick 2012-01-12 12:28:27