1

我有一个 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 .. 来做?

4

2 回答 2

0

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

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

于 2012-06-08T15:16:54.540 回答
0

首先,有几条评论:

  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 表达式......

于 2012-06-08T16:13:01.343 回答