我有一个来自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?
你不能让标准的XML解析器解析你的格式,即使它“看起来像”XML,停止尝试。不允许使用符合标准的XML解析器来解析无效的XML。这是一个设计决策,基于HTML解析引起的所有问题怪癖模式。
编写自己的解析器并不难。 XML非常严格,除非您需要高级功能,否则语法很简单。
XmlDocument
和XDocument
。