从数据表创建XML时出错

本文关键字:出错 XML 创建 数据表 | 更新日期: 2023-09-27 18:03:53

我必须在c#应用程序中从数据表读取后创建xml。除了" ' "answers" & "之外,这个逻辑工作得很好。当遇到这些特殊字符时,生成的xml会出现错误。错误提示为"缺少必需的空白"

要对下面的代码进行哪些更改才能使其适用于上面提到的特殊字符?

框架: .Net 3.0

注意:下面给出的代码解释了什么都是有效字符,什么是无效字符(特殊字符)。

注意:数据表是从csv文件中读取的,该文件看起来像

ZipCode,City,State,County
92357,VETRANS' HOSPITAL,CA,SAN BERDINO
36675,MOBLE P&DC,AL,MOBLE
folllows…

代码

StringBuilder xmlForCSV = new StringBuilder();
        xmlForCSV.Append("<root>");
        foreach (DataRow excelRow in dtCSVExcelSource.Rows)
        {
            string zipCode = RemoveSpecialCharacters(excelRow["ZipCode"].ToString());
            string city = RemoveSpecialCharacters(excelRow["City"].ToString());
            string state = RemoveSpecialCharacters(excelRow["State"].ToString());
            string county = RemoveSpecialCharacters(excelRow["County"].ToString());
            xmlForCSV.Append("<row ZipCode='" + zipCode +
                                  "' City='" + city +
                                   "' State='" + state +
                                   "' County='" + county + "'/>");
        }
        xmlForCSV.Append("</root>");

函数

private string RemoveSpecialCharacters(string str)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++)
        {
            if ((str[i] >= '0' && str[i] <= '9') || (str[i] >= 'A' && str[i] <= 'z' || (str[i] == '.' || str[i] == '_' || str[i] == '-' || str[i] == ' ' || str[i] == '(' || str[i] == ')' || str[i] == '/' || str[i] == '''' || str[i] == '''' || str[i] == '#')))
            {
                sb.Append(str[i]);
            }
            else
            {
                if (str[i] == '&')
                {
                    string ampersand = System.Convert.ToString(str[i]);
                }
                else
                {
                    string specialCharacter = System.Convert.ToString(str[i]);
                }
            }

        }
        return sb.ToString();
    }

感谢

Lijo

从数据表创建XML时出错

您使用单引号'来包围您的属性。您的RemoveSpecialCharacters函数不会删除它,因此您创建的XML无效:

<row ... City='VETRANS' HOSPITAL' ... />

是造成麻烦的原因。

一个快速的修复方法是禁止在RemoveSpecialCharacters中使用单引号。

有关自动转义特殊字符的方法,请参阅此处。

一般来说,您不应该使用StringBuilder编写XML。使用XmlTextWriterXDocument甚至dtCSVExcelSource.WriteXml(...)

你的RemoveSpecialCharacters函数有很多问题。

  • else块中的代码不做任何事情
  • str[i] >= 'A'之前开始的括号似乎没有正确平衡
  • 允许范围str[i] >= 'A' && str[i] <= 'z'是不寻常的,允许字符如下:[']^_