我的XML文件中只有一个名称空间,在根元素上定义。
<root xmlns="http://my-namespace">
<aChild>
<secondChild />
...
是否可以避免在我的xpath表达式的每个元素之前写入它?
做完
xmlNamespaceManager.AddNamespace("ns", "http://my-namespace");
我必须写
xml.SelectNodes("ns:root/ns:aChild/ns:secondChild", xmlNamespaceManager);
只做
会容易得多xml.SelectNodes("ns:root/aChild/secondChild", xmlNamespaceManager);
我有开发者将xpath表达式发送到XML,但他们不一定知道前缀或名称空间,他们只知道他们必须访问root/aChild/secondChild
。
谢谢。
答案 0 :(得分:1)
您可以在文档级别添加命名空间
XmlDocument doc = new XmlDocument();
XmlSchema schema = new XmlSchema();
schema.Namespaces.Add("xmlns", "http://www.sample.com/file");
doc.Schemas.Add(schema);
答案 1 :(得分:1)
不幸的是,尽管看起来很直观,但在XPath中定义默认命名空间并不容易。没有名称空间声明的XPath名称绑定到null
名称空间,而不是分配给默认名称空间的URI。
这在XPath default namespace handling和Easy things should be Easy
中讨论过