【问题标题】:xpath select by namespace contentxpath 按命名空间内容选择
【发布时间】:2018-04-01 04:09:28
【问题描述】:

我正在考虑在我的配置文件中使用 xml 命名空间。如果我使用命名空间标记配置文件内容,则会识别程序版本的选项。

有没有办法选择具有特定命名空间版本号及更低的所有节点?这允许任何版本的应用程序无需更改即可读取任何版本的配置文件。

例子:

  <ns1:config xmlns:ns1="version 1.0">
     <ns1:somesetting>blah</ns1:somesetting>
     <ns2:SomeNewSetting xmlns:ns2="version 2.0">foob</ns2:SomeNewSetting>
  </ns1:config>

应用的版本 1 选择 namespace = "version 1.0"。

应用的版本 2 选择 namespace = "version 1.0" 或 namespace = "version 2.0"。

还有比暴力破解更好的方法吗?

【问题讨论】:

    标签: xpath xml-namespaces


    【解决方案1】:

    使用名称空间来管理 XML 词汇表的版本控制通常被认为是一个坏主意。您的问题很好地说明了原因之一:命名空间没有排序。使用版本属性要好得多。根据属性值动态选择元素比通过命名空间动态选择要容易得多。

    【讨论】:

    • 为什么它被认为是“坏的”?这似乎是它们被创建的原因。 version 属性要简单得多,但会使文档膨胀。
    • 在阅读了权威人士对该问题的讨论后,版本属性并不能确保向后兼容性,除非第一个版本是在考虑兼容性的情况下编写的。如果第一个版本不尊重版本属性,它将暴露给多个节点。我认为两者都没有任何好处,可以使他们领先于其他人
    • 版本问题没有完美的答案。但是请记住,如果新版本的变化很小,那么随着版本属性的变化,大多数接收者需要进行零变化,但是随着命名空间的变化,每个接收者都需要进行更改,并且变化可能很大。跨度>
    猜你喜欢
    • 2010-10-06
    • 2010-09-11
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多