2012-01-12 80 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