1

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

dtResults.WriteXml(fileName);

_x0020_正在添加,而不是在输出的 XML 文档中添加空格。

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

这是数据网格:

在此处输入图像描述

这是生成的 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>
4

3 回答 3

7

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

<ElementName Attribute1="value" />

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

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

  • 更改中列的名称DataTable,使其不包含空格
  • XDocument使用、XmlDocumentXmlWriter或手动输出 XMLXmlSerializer并根据需要设置输出格式
  • 像现在一样输出 XML,然后在其上运行 XSLT 脚本以修复格式
于 2013-02-18T20:28:11.050 回答
2

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

如果确实需要一个空格(我认为这会使 xml 无法用于解析),您可以简单地在文件中进行查找和替换。

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

于 2013-02-18T20:26:52.793 回答
0

我也面临同样的问题。我正在从包含带空格的列的 excel 文件中导出数据。所以我的专栏也包含空间。所以我尝试了以下方式。

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

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

于 2015-02-23T15:53:36.890 回答