2012-06-08 38 views
1

我有一个xml;我需要动态更新一些值。在xslt中使用xpath更新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也将被提取hed并需要替换相应的值。

是否可以通过xslt ..?

+0

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

回答

0

XSLT将XML文档转换为另一种形式(包括另一个XML文档)。这通常是你如何做到这一点,通过创建一个新的输出文件,发生一些转变。然后,您可以删除旧文件并替换为新文件。

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

0

要开始,一对夫妇的意见:

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

回到您的问题!

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

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

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

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