gpt4 book ai didi

c# - 为什么我不能从我的 XPathNavigator 中检索属性值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:58 24 4
gpt4 key购买 nike

我有这样的 XML:

<?xml version="1.0"?>
<a xmlns="http://mynamespace">
<b>
<c val="test" />
<b>
</a>

我正在尝试使用类似这样的方法在“c”标签上找到“val”属性的值:

XmlDocument doc = new XmlDocument();
doc.Load("myxml.xml");

nsMgr = new XmlNamespaceManager(doc.NameTable);
nsMgr.AddNamespace(@"mns", "http://mynamespace");

XPathNavigator root = doc.CreateNavigator();

foreach (XPathNavigator nav in root.Select("//mns:c", nsMgr))
{
string val = nav.GetAttribute("val", NS);

Console.WriteLine("val == "+val);
}

我的问题是 GetAttribute 总是返回一个空字符串。我错过了什么?


更新:

看来我可以通过将空字符串传递给 GetAttribute 来解决这个问题,即

string val = nav.GetAttribute("val", "");

因此,我现在的问题是:为什么这样做有效?尽管已经针对需要“val”属性的架构验证了 XML,但为什么“val”不属于我的命名空间(我在上面的示例代码中不小心省略了这一步,但我正在验证 XML)。

最佳答案

默认命名空间声明不适用于属性,因此名为“val”的属性不在命名空间中,如果您想访问它,则需要在不使用命名空间的情况下访问它。将属性放入命名空间的唯一方法是给它一个带有前缀和本地名称的限定名称(例如 pf:val),其中前缀绑定(bind)到命名空间(例如 xmlns:pf="http://example. com/foo").

关于c# - 为什么我不能从我的 XPathNavigator 中检索属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252014/

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