我需要读取一个属性为xmlns=“http://www.w3.org/2000/09/xmldsig”的xml元素。
xpathselectelement给出错误“对象引用未设置为对象的实例”。
这是示例代码。

var xml = "<root><tagA>Tag A</tagA><tagB>Tag B</tagB></root>";
XDocument xd = XDocument.Parse(xml);
var str = xd.XPathSelectElement("/root/tagB").ToString(SaveOptions.DisableFormatting);
Console.WriteLine(str);

上述代码的结果是:
<tagB>Tag B</tagB>

如果我把属性,
var xml = "<root><tagA>Tag A</tagA><tagB xmlns=\"http://www.w3.org/2000/09/xmldsig#\">Tag B</tagB></root>";

我弄错了。
Object reference not set to an instance of an object.

我是不是丢了什么东西?有人能帮我吗?(我知道我可以用其他方法。我只想知道我错过了什么)
非常感谢你。

最佳答案

您可以在XmlNamespaceManager中注册元素的命名空间:

XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
nsmgr.AddNamespace("ns", "http://www.w3.org/2000/09/xmldsig#");

var str = xd.XPathSelectElement("/root/ns:tagB", nsmgr)
            .ToString(SaveOptions.DisableFormatting);
Console.WriteLine(str);

07-26 04:08