我目前正在处理由于字段值中的符号而无法使用XmlDocument Load方法解析的大型xml文件。例如,查看visual studio的屏幕截图。
是什么?黑钻是什么意思?它是十六进制字符吗?
我问题的第二部分。是否有可以编写的c#代码,搜索将xml文件加载到字符串中并找到所有这些符号?
<root>
<record>
<field>field�field</field>
</record>
</root>
经过更多的研究后,我发现有一个“隐藏”的角色。角色是一个不间断的空间。根据XML规范https://www.w3.org/TR/xml/#charsets,非中断空间是否是有效的XML字符。非中断空间的十六进制ascii值为xA0。
Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] / *任何Unicode字符,不包括代理块,FFFE和FFFF。 * /
答案 0 :(得分:2)
好吧,我能够解析和反序列化上面的XML。
试试这个:
序列化类
public class root
{
public record record { get; set; }
}
public class record
{
public string field { get; set; }
}
C#代码
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
try
{
var xmlDoc = new XmlDocument();
xmlDoc.Load("D:\\TestXML.xml");
// Deserialize the XML
var Deserializer = DeserializeXml<root>(xmlDoc.DocumentElement.OuterXml);
//Get number of occurrences of '�'
int count = Deserializer.record.field.Split('�').Length - 1;
}
catch(Exception ex)
{
throw;
}
}
public static T DeserializeXml<T>(string xml)
{
T result;
XmlSerializer ser = new XmlSerializer(typeof(T));
using (TextReader tr = new StringReader(xml))
{
result = (T)ser.Deserialize(tr);
}
return result;
}
}