【发布时间】:2018-07-10 00:16:20
【问题描述】:
我有一个来自 Adobe PDF AcroForms 的 xml 字符串,它显然允许命名以数字字符开头的表单字段。我正在尝试将此字符串解析为 XDocument:
XDocument xDocument = XDocument.Parse(xmlString);
但每当我遇到这样一个名称以数字字符开头的表单字段时,xml 解析就会抛出 XmlException:
名称不能以“数字”字符开头
我发现的其他解决方案是关于使用:XmlReaderSettings.CheckCharacters
using (XmlReader xmlReader = XmlReader.Create(new StringReader(xmlString), new XmlReaderSettings() { CheckCharacters = false }))
{
XDocument xDocument = XDocument.Load(xmlReader);
}
但这也没有用。一些文章指出原因是 MSDN 文章中提到的要点之一:
如果 XmlReader 正在处理文本数据,它总是检查 无论属性如何,XML 名称和文本内容都是有效的 环境。将 CheckCharacters 设置为 false 会关闭字符检查 用于字符实体引用。
所以我尝试使用:
using(MemoryStream memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(xmlString)))
using (XmlReader xmlReader = XmlReader.Create(memoryStream, new XmlReaderSettings() { CheckCharacters = false }))
{
XDocument xDocument = XDocument.Load(xmlReader);
}
这也不起作用。 谁能帮我弄清楚如何解析包含名称以数字字符开头的xml元素的xml字符串? 应该如何使用标志 XmlReaderSettings.CheckCharacters?
【问题讨论】:
-
您不必使用 XmlReader。试试 StringReader,它不会做所有的检查。仍然可以加载 Xdocument.Load(stringReader) 或使用 Parse 读取字符串:XDocument.Parse(string);
-
@jdweng 我已经尝试过了,正如您从我问题中的代码 sn-ps 中看到的那样,但这会产生 XmlException。