Datatable.WriteXml - 如何在元素名称中保留空格

时间:2013-02-18 20:09:12

标签: c# .net xml vb.net xml-parsing

我在我的应用程序中添加了DataTable被转换为XML的功能,如下所示:

dtResults.WriteXml(fileName);
在输出的XML文档中添加

_x0020_而不是空格。

是否可以在没有_x0020_代码的情况下生成XML文件?即可以使用该方法或类似方法生成XML文件,并实际保留空间?

这是DataGrid:

enter image description here

这是生成的XML:

<Customers>
    <Customer_x0020_Name>Sean</Customer_x0020_Name>
  </Customers>
  <Customers>
    <Customer_x0020_Name>John</Customer_x0020_Name>
  </Customers>
  <Customers>
    <Customer_x0020_Name>Sarah</Customer_x0020_Name>
  </Customers>
  <Customers>
    <Customer_x0020_Name>Mark</Customer_x0020_Name>
  </Customers>
  <Customers>
    <Customer_x0020_Name>Norman</Customer_x0020_Name>
  </Customers>

3 个答案:

答案 0 :(得分:6)

列的名称包含空格。 XML元素名称不能包含空格。 XML中使用空格将元素名称与属性名称分隔开来,例如:

<ElementName Attribute1="value" />

DataTable.WriteXml方法尝试以一致的方式写出XML文件,以便稍后可以使用另一个DataTable对象加载XML并尽可能接近原始的精确副本可能。因此,它用十六进制值替换非法字符,以便非法字符在翻译时不会丢失。

因此,如果您想以不同的方式将其写入XML,则需要:

  • 更改DataTable中列的名称,使其不包含空格
  • 使用XDocumentXmlDocumentXmlWriterXmlSerializer自行手动输出XML并根据需要格式化输出
  • 像现在一样输出XML,然后在其上运行XSLT脚本以修复格式

答案 1 :(得分:2)

我不认为你想要的是可能的。我不相信XML元素名称可以包含空格,就像变量名称不能包含空格一样。它需要成为一个空间的原因是什么?

如果确实需要一个空格(我认为它会使xml无法解析),你只需在文件中进行查找和替换即可。

如果您要将其存储为读回并再次显示在DataTable中,我只需在重新读取数据后重命名列,用空格替换_x0020_

答案 2 :(得分:0)

我也面临同样的问题。我从excel文件导出数据,该文件包含空格列。所以我的列也包含空格。 所以我尝试了以下方式。

StringWriter strXML = new StringWriter();
dtPartOriginalData.WriteXml(strXML, XmlWriteMode.IgnoreSchema, false);
strMessages = strXML.ToString().Replace("_x0020_", "");

这将替换_x0020_并生成xml。但是你不能使用这个xml构造相同的数据表。它是一个解决方法,我想添加它作为一个建议。谢谢。