查询XML而不担心名称空间

问题描述:

我有元素上有和没有前缀的XML,但没有为它们中的任何元素定义名称空间。当我尝试加载它时,它给了我一个XDocument.Load错误(至少,我认为这就是它发生的地方),某些前缀没有被定义。有没有办法告诉框架忽略任何命名空间前缀?我使用LINQ to XML,但如果可用的话可以使用其他的东西。查询XML而不担心名称空间

我不一定会预先定义它们,因为我将要处理各种文件,这些文件可能有也可能没有定义前缀,也没有明确的xmlns声明。

+0

请参阅http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

+4

处理XML而不用担心名称空间等同于“处理XML而不用担心XML“。 –

+0

是的。我同意,但这是一个基于XML的文档,我只需要担心标签。 –

不是前缀应该表示名称空间的缩写吗?我相信在处理它之前,需要清理那些没有与它们关联的名称空间的前缀,因为它不是有效的XML。一个快速的正则表达式来替换</prefix的所有前缀:< /:和<前缀:<应该这样做。

要做到这一点,先用</<.*?:<替换下面的正则表达式匹配 </.*?:(不改变顺序)。

+0

好主意,我可能会改用这条路线。 –

你想做的事,可以使用XmlDocument什么的一种方法:

XmlDocument d = new XmlDocument(); 
using (var textReader = new XmlTextReader(@"test.xml")) 
{ 
    textReader.Namespaces = false; 
    d.Load(textReader); 
} 

你将失去​​使用LINQ的语法,以XML查询数据的能力。

实际上,你可以使用LINQ到XML和文件中的如下因素线

nameSpaceManager.AddNamespace("prefixName", "urn:ignore"); 其中nameSpaceManagerXmlNamespaceManager类型设置为每个前缀忽略的命名空间。 但从你的问题我觉得这不是一个合理的解决方案。

+0

它可能是。谢谢 –