我需要一些帮助来检查节点是否存在。
我可以选择像这样的节点
node["sa:name1"]["sa:name2"]["sa:name3"]
这样可以正常工作但是如果节点不存在我得到错误我试过这个
if(node.SelectSingleNode("/sa:name1/sa:name2/sa:name3") != null)
但这个dident帮助这只会产生新的错误
类型' System.Xml.XPath.XPathException'的例外情况发生在System.Xml.dll中但未在用户代码中处理
其他信息:需要命名空间管理器或XsltContext。此查询具有前缀,变量或用户定义的函数。
答案 0 :(得分:1)
使用http://msdn.microsoft.com/en-us/library/system.xml.xmlnamespacemanager.addnamespace.aspx
XmlNamespaceManager nsMgr = new XmlNamespaceManager(node.OwnerDocument.NameTable);
nsMgr.AddNamespace("sa", "http://example.com/");
XmlNode selected = node.SelectSingleNode("/sa:name1/sa:name2/sa:name3", nsMgr);
if (selected != null)
{
...
}
当然,您需要使用输入文档中节点的URI而不是http://example.com/
,我认为命名空间URI是http://rep.oio.dk/uvm.dk/studieadm/common/xml/schemas/2006/02/20/
。
答案 1 :(得分:0)
错误很明显:您需要在代码中添加命名空间管理器才能使xpath查询生效。使用重载版本的SelectSingleNode()接受XmlNamespaceManager的实例作为参数。
XmlDocument doc = new XmlDocument();
doc.Load("booksort.xml");
//Create an XmlNamespaceManager for resolving namespaces.
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("bk", "urn:samples");
//Select the book node with the matching attribute value.
XmlNode book;
XmlElement root = doc.DocumentElement;
book = root.SelectSingleNode("descendant::book[@bk:ISBN='1-861001-57-6']", nsmgr);
Console.WriteLine(book.OuterXml);
http://msdn.microsoft.com/en-us/library/h0hw012b(v=vs.110).aspx
答案 2 :(得分:0)
在调用SelectSingleNode
之前,您需要为文档添加命名空间管理器:
XmlNamespaceManager xmlnsMan = new XmlNamespaceManager(xml.NameTable);
xmlnsMan.AddNamespace("sa", "[namespace]);