【问题标题】:updating xml using xpath in xslt在 xslt 中使用 xpath 更新 xml
【发布时间】:2012-06-08 15:12:19
【问题描述】:

我有一个 xml ;我需要动态更新一些值。

例如:

 <School>
  <class name=1>
   <students>10</students>
   <teacher>3</teacher>
  </class>
  <class name=2>
   <students>102</students>
   <teacher>13</teacher>
  </class>
</School>

在其他xml中的位置:

我将有 xpath 和相应的值 例如:

 <data>
  <path>/school/class['name' = 1]/students</path><value>20</value>
 </data>

所以当我通过 xslt 查询时

会获取默认的xml,也会获取数据相关的xml,需要替换对应的值。

是否有可能通过 xslt ..?

【问题讨论】:

  • 动态 XPath 表达式解析和评估在 XSLT 1.0 或 XSLT 2.0 中都是不可能的。它很可能在 XSLT 3.0 中成为可能。在那之前,最好改变不切实际的设计/要求。

标签: xml xslt xpath


【解决方案1】:

XSLT 会将 XML 文档转换为另一种形式(包括另一个 XML 文档)。这通常是您执行此操作的方式,方法是创建一个发生一些转换的新输出文件。然后您可以删除旧文件并替换为新文件。

编辑: 重新阅读您的帖子后,我想您也在询问是否可以处理两个 XML 文档作为 XSLT 的输入,答案是肯定的,您可以。看一下“document()”函数。

【讨论】:

    【解决方案2】:

    首先,几个 cmets:

    1. 您的 XML 格式不正确(属性值应该用引号括起来)
    2. XPath 表达式/school/class['name' = 1]/students 可能不会达到您的预期;) ... 谓词'name' = 1 将字符串'name' 与整数1 进行比较并返回false,这意味着您的表达式将始终返回一个空节点集。要选择 name 属性为 1 的类,你宁愿写:/school/class[@name = 1]/students

    回到你的问题!

    使用标准 XSLT 1 或 2,您无法执行动态 XPath 表达式。这在 XSLT 3.0 中应该是可能的,并且可能使用专有扩展来实现(取决于您的处理器)。

    XQuery 之类的语言(及其更新工具)可能更合适(当然,如果您可以调整 XPath 表达式以符合 XQuery)。

    如果您仍然需要使用 XSLT,我通常执行此类任务的方式是将生成 XSLT 转换作为第一步,然后将其作为第二步执行。

    第一步本身可以是一个 XSLT 转换,它将在生成的 XSLT 转换中复制您的 XPath 表达式。运行第二步时,这些 XPath 表达式只是普通的静态 XPath 表达式...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2011-05-29
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多