繁体   English   中英

如何在c#中忽略XML文档中的命名空间?

[英]How can I ignore the namespace in an XML document in c#?

我正在尝试在c#中打开一个XML文件,按属性名称查找节点,该节点工作正常,然后在同一节点中显示XML属性的名称。

我的代码很简单(因为我从其他来源捏了它!)并且在我的测试XML文档上工作。 但是,当我尝试使用实际文件时,它不起作用。 我一直在拉我的头发(不是我剩下的很多)并且发现它是因为我正在使用的实际文件中的xmlns属性。 命名空间的路径不存在。

我的代码如下:

XmlDocument doc = new XmlDocument();
doc.Load(@"c:\deroschedule\test.sym");
var orient = doc.SelectSingleNode("//Attr[@name='Orientation]/@value");

当xmlns未包含在文件中时,上述代码可以正常工作。 但是,当包含xmlns时,orient变量为null。 xmlns路径不存在,当我尝试在浏览器中导航到它时,我收到404错误。

不确定xml命名空间是诚实的,但我有数千个这样的文件,无法手动编辑它们。 是否有一种简单的方法可以让C#忽略命名空间并假装它不在那里? 我试过Xpath,但这让我大吃一惊!

好吧,我自己想出来了。 我想我会在这里发布答案,尽管显然有成千上万的其他答案。

我出错的地方误解了名称空间实际上做了什么。 无论如何,我必须使用xmlnamespacenmanager来声明与xml文件中相同的命名空间。 然后我不得不在查询中使用命名空间。

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\deroschedule\test6.sym");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("ma", "http://www.yournamespaceinfohere.com/");
var orient = doc.SelectSingleNode("//ma:attr[@name='Orientation']/@value", ns);

现在我的下一个挑战是尝试从xml文件中读取bmp,应该很简单,对吧?!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM