C# XPathSelectElement 和带有属性 xmlns=“http://www.w3.org/2000/09/xmldsig#”的 xml帮助
我需要读取具有属性 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.
我在这里错过了什么吗?谁能帮我一下。 (我知道我可以通过使用其他方法来获得。我只是想知道我在这里缺少什么)
非常感谢。
I need to read an xml element which has attribute xmlns="http://www.w3.org/2000/09/xmldsig#".
XPathSelectElement is giving error "Object reference not set to an instance of an object."
Here is the sample code.
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);
The result of the above code is:
<tagB>Tag B</tagB>
If I put attribute,
var xml = "<root><tagA>Tag A</tagA><tagB xmlns=\"http://www.w3.org/2000/09/xmldsig#\">Tag B</tagB></root>";
I got error.
Object reference not set to an instance of an object.
Am I missing something here? Can anyone please help me out. (I know I can get by using other methods. I just want to know what I am missing here)
Thank you very much.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以在 XmlNamespaceManager 中注册元素的命名空间:
You can register the element's namespace in an XmlNamespaceManager:
您应该阅读一些有关 XML 的内容。第二个示例中的
tagB
位于不同的命名空间中。默认情况下,您正在查询空名称空间,如果您想查询不同的名称空间,则需要使用名称空间管理器并将名称空间分配给前缀,然后使用相同的前缀为元素名称添加前缀,它将再次工作。You should read some about XML. The
tagB
in the second example is in a different namespace. By default, you're querying the empty namespace, if you want to query a different one you need to use a namespace manager and assign the namespace to a prefix, then prefix the element name with this same prefix and it will work again.它不仅仅是任何属性。例如尝试
看看它是否有效。
问题是您使用 xmlns 更改了命名空间,因此您的 XPath 不再匹配。
It's not just any attribute. For example try with
to see that it works.
The problem is that you change the namespace by using xmlns, so your XPath doesn't match anymore.