【发布时间】:2017-05-11 20:22:35
【问题描述】:
我正在尝试在 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 变量为空。 xmlns 路径不存在,当我尝试在浏览器中导航到它时出现 404 错误。
说实话,我不确定 xml 命名空间是什么,但我有数千个这样的文件,无法手动编辑它们。有没有一种简单的方法可以让 C# 忽略命名空间并假装它不存在?我已经尝试过使用 Xpath,但这让我大吃一惊!
【问题讨论】:
-
您不应“忽略”它,而应在查询中指定它。
-
好的,谢谢,关于如何将其包含在查询中的任何提示?
-
有示例 xml 吗?
-
嗨,抱歉,不知道如何附加。您可以在这里找到 XML 文件:dero.co.uk/dev/test6.sym 这是一个 sym 文件,但实际上是 XML
-
忽略命名空间有点像忽略名称的前三个字符。这不是你想做的事情。对于问题的答案,只需搜索“XPath 默认命名空间”并从数千个答案中进行选择。