【问题标题】:Is it possible to specify the namespace prefix just once in a xpath expression?是否可以在 xpath 表达式中只指定一次命名空间前缀?
【发布时间】:2011-11-06 16:50:56
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c# .net xml xpath namespaces


    【解决方案1】:

    不幸的是,尽管看起来很直观,但在 XPath 中定义默认命名空间并不容易。没有命名空间声明的 XPath 名称绑定到 null 命名空间,而不是分配给默认命名空间的 URI。

    这在XPath default namespace handlingEasy things should be Easy 中进行了讨论

    【讨论】:

      【解决方案2】:

      您可以在文档级别添加命名空间

        XmlDocument doc = new XmlDocument();  
      
        XmlSchema schema = new XmlSchema();
        schema.Namespaces.Add("xmlns", "http://www.sample.com/file");
      
        doc.Schemas.Add(schema);
      

      【讨论】:

      • 我不太明白在那之后我应该如何使用我的 XML 文档来查询 xpath(例如使用 SelectNodes())。
      • 在添加架构后,您不需要每次都指定它,但您可以这样做:doc.SelectSingleNode("/mynode")
      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2011-04-25
      • 1970-01-01
      • 2011-11-10
      • 2021-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多