在xslt中使用xpath更新xml

在xslt中使用xpath更新xml,xml,xslt,xpath,Xml,Xslt,Xpath,我有一个xml;我需要动态更新一些值 例如: <School> <class name=1> <students>10</students> <teacher>3</teacher> </class> <class name=2> <students>102</students> <teacher>13</teacher&

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

例如:

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

10
3.
102
13
其中,在其他xml中:

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

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

/学校/班级['name'=1]/学生20
所以当我通过xslt进行查询时

默认xml将被提取,与数据相关的xml也将被提取,并且需要替换相应的值


是否可以通过xslt..?

xslt将XML文档转换为另一种形式(包括另一种XML文档)。这通常是通过创建一个新的输出文件并进行一些转换来实现的。然后可以删除旧文件并替换为新文件

编辑:
在重读您的文章时,我想您也在问是否可以处理两个XML文档作为XSLT的输入,答案是可以的。请看一看“document()”函数。

首先,有几条注释:

  • XML格式不正确(属性值应括在引号中)
  • XPath表达式
    /school/class['name'=1]/students
    可能不会执行您期望的操作;)。。。谓词
    'name'=1
    将字符串
    'name'
    与整数
    1
    进行比较,并返回false,这意味着您的表达式将始终返回空节点集。要选择name属性为1的类,您最好编写:
    /school/class[@name=1]/students
  • 回到你的问题上来

    使用标准XSLT1或2,您无法执行动态XPath表达式。XSLT 3.0应该可以做到这一点,而使用专有扩展(取决于处理器)也可以做到这一点

    像XQuery这样的语言(及其更新工具)可能更适合(当然,如果您可以将XPath表达式弯曲为符合XQuery的话)

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


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

    动态XPath表达式解析和计算在XSLT 1.0或XSLT 2.0中都是不可能的。它很可能在XSLT3.0中实现。在此之前,最好改变不切实际的设计/要求。