是否可以在xpath表达式中只指定一次名称空间前缀?

时间:2011-08-30 10:39:25

标签: c# .net xml xpath namespaces

我的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

谢谢。

2 个答案:

答案 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 handlingEasy things should be Easy

中讨论过