gpt4 book ai didi

c# - 如何在 C# 中忽略 XML 文档中的 namespace ?

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:35 25 4
gpt4 key购买 nike

我试图在 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,但这让我大吃一惊!

最佳答案

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

我出错的地方是误解了命名空间的实际作用。无论如何,我不得不使用 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,应该很容易吧?!

关于c# - 如何在 C# 中忽略 XML 文档中的 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com