查询XML而不担心名称空间
我有元素上有和没有前缀的XML,但没有为它们中的任何元素定义名称空间。当我尝试加载它时,它给了我一个XDocument.Load错误(至少,我认为这就是它发生的地方),某些前缀没有被定义。有没有办法告诉框架忽略任何命名空间前缀?我使用LINQ to XML,但如果可用的话可以使用其他的东西。查询XML而不担心名称空间
我不一定会预先定义它们,因为我将要处理各种文件,这些文件可能有也可能没有定义前缀,也没有明确的xmlns声明。
不是前缀应该表示名称空间的缩写吗?我相信在处理它之前,需要清理那些没有与它们关联的名称空间的前缀,因为它不是有效的XML。一个快速的正则表达式来替换</prefix的所有前缀:< /:和<前缀:<应该这样做。
要做到这一点,先用</
和<.*?:
与<
替换下面的正则表达式匹配 </.*?:
(不改变顺序)。
好主意,我可能会改用这条路线。 –
你想做的事,可以使用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");
其中nameSpaceManager
是XmlNamespaceManager
类型设置为每个前缀忽略的命名空间。 但从你的问题我觉得这不是一个合理的解决方案。
它可能是。谢谢 –
请参阅http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –
处理XML而不用担心名称空间等同于“处理XML而不用担心XML“。 –
是的。我同意,但这是一个基于XML的文档,我只需要担心标签。 –