我需要使用XmlDocument
类来加载XML文件:
var doc = new XmlDocument();
doc.Load(filename);
不幸的是,在我的XML中有一个XmlException
时,我会使用特定的字符来表示我的数据,特别是我有一个如下节点:
<rect data="string with invalid characters: † ¶"/>
因此,禁用字符为:†
和¶
。
如何在没有异常的情况下加载文件并将这些字符留在我的XML文件中?
答案 0 :(得分:0)
您需要使用数字字符引用替换这些字符。与您如何替换&gt;类似和&lt;与&amp; GT;和&amp;你会用&amp;这样的东西替换那些字符#931;或任何引用这些特定字符的内容。
编辑:我必须在&amp;之后添加一个空格避免编辑实际上接受并解释角色。只需删除正在使用的空间 - 您就明白了。
答案 1 :(得分:0)
或者,如果您无法控制XML的源代码并且只需要读取数据库中的所有值,那么您可以使用XmlTextReader逐行读取xml,停止元素你知道可能包含坏数据,并读取该元素的字符。我过去必须这样做。像这样的东西
static void Main(string[] args)
{
var xtr = new XmlTextReader("");
xtr.Normalization = false;
while (xtr.Read())
{
if(xtr.IsStartElement("Row")) // My xml doc contains many row elements
{
var fields = new string[6];
while(xtr.Read())
{
for (int i = 0; i < 6; i++) // I know my xml only has six child elements per row
{
while(!xtr.IsStartElement())
{
xtr.Read(); // We're not interested in hitting the end elements
}
if(i == 1) // I know my special characters are in the second child element of my row
{
var charBuff = new char[255];
xtr.ReadChars(charBuff, 0, 255); // I know there will be a maximum of 255 characters
fields[i] = new string(charBuff);
}
else
{
fields[i] = xtr.ReadElementContentAsString();
}
}
}
}
}
}