我在元素上有和没有前缀的XML,但没有为任何元素定义名称空间。当我尝试加载它时,它给我一个错误的XDocument.Load(至少,我认为它发生的地方),没有定义某些前缀。有没有办法告诉框架忽略任何名称空间前缀?我正在使用LINQ to XML,但如果可用的话可以使用其他东西。
我不一定能预先定义它们,因为我将使用各种文档,这些文档可能有也可能没有定义前缀,也没有明确的xmlns声明。
答案 0 :(得分:2)
前缀是不应该代表命名空间的缩写?我相信在处理之前,你需要先清理那些没有与之关联的命名空间的前缀,因为它不是有效的XML。一个快速正则表达式,用于替换表格< /前缀的所有前缀:< /:和<前缀:with<应该这样做。
要执行此操作,请先替换以下正则表达式匹配项
</.*?:
</
<.*?:
和<
与{{1}}(不要更改排序)。
答案 1 :(得分:1)
您想要做的事情的方法可能是使用XmlDocument
:
XmlDocument d = new XmlDocument();
using (var textReader = new XmlTextReader(@"test.xml"))
{
textReader.Namespaces = false;
d.Load(textReader);
}
您将失去使用LINQ to XML语法查询数据的能力。
您实际上可以使用LINQ to XML并通过为文件中的每个前缀设置以下行来忽略命名空间
nameSpaceManager.AddNamespace("prefixName", "urn:ignore");
其中nameSpaceManager
的类型为XmlNamespaceManager
。
但是根据你的问题,我觉得这不是一个合理的解决方案。