如何解决XElement.Load和“未声明的前缀”异常
我正在尝试使用Xelement.Load()方法加载xml文件,对于某些文件,我得到“ ditaarch”是未声明的前缀异常。此类麻烦的xml的内容类似于此简化版本:
<?xml version="1.0" encoding="UTF-8"?>
<concept ditaarch:DITAArchVersion="1.3">
<title>Test Title</title>
<menucascade>
<uicontrol>text</uicontrol>
<uicontrol/>
</menucascade>
</concept>
我尝试遵循建议,使用xml名称空间管理器手动添加或忽略“ ditaarch”名称空间:
using (XmlReader reader = XmlReader.Create(@"C:\test\example.xml"))
{
NameTable nameTable = new NameTable();
XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager(nameTable);
nameSpaceManager.AddNamespace("ditaarch","");
XmlParserContext parserContext = new XmlParserContext(null,nameSpaceManager,null,XmlSpace.None);
XElement elem = XElement.Load(reader);
}
但是它导致了与以前相同的异常。解决方案很可能是微不足道的,但我只是看不到:(
如果有人能够指出正确的方向,我将不胜感激。
解决方法
显示的标记不是名称空间格式正确的XML,因此我不认为XElement或XDocument是选项,因为它不支持名称中的冒号。您可以使用旧式new XmlTextReader("foo.xml") { Namespaces = false }
对其进行解析。
您可以使用XmlDocument
代替XDocument
或XElement
并使用例如
XmlDocument doc = new XmlDocument();
using (XmlReader xr = new XmlTextReader("example.xml") { Namespaces = false })
{
doc.Load(xr);
}
Console.WriteLine("Number of empty elements: {0}",doc.SelectNodes("//*[not(*)][not(normalize-space())]").Count);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。