Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt XPATH从XML中获取不同的节点集_Xslt_Xpath_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

Xslt XPATH从XML中获取不同的节点集

Xslt XPATH从XML中获取不同的节点集,xslt,xpath,xslt-1.0,xslt-2.0,Xslt,Xpath,Xslt 1.0,Xslt 2.0,我有一个XML文件,如下所示 <?xml version="1.0" encoding="UTF-8"?> <body xmlns:bons0="http://DistinctAppSample" xmlns:httpsca="http://www.ibm.com/xmlns/prod/websphere/http/sca/6.1.0" xmlns:mq="http://www.ibm.c

我有一个XML文件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<body xmlns:bons0="http://DistinctAppSample" xmlns:httpsca="http://www.ibm.com/xmlns/prod/websphere/http/sca/6.1.0" xmlns:mq="http://www.ibm.com/xmlns/prod/websphere/mq/sca/6.0.0" xmlns:smo="http://www.ibm.com/websphere/sibx/smo/v6.0.1" xmlns:tns="http://DistinctAppSample/TestInf" xmlns:tns1="http://www.w3.org/2005/08/addressing" xmlns:tns2="http://www.w3.org/2003/05/soap-envelope" xmlns:tns_1="wsdl.http://DistinctAppSample/TestInf" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="foo.xsd">
  <tns:testOperation>
    <input>
      <request>
        <salary>100</salary>
        <newSalary>101</newSalary>
      </request>
      <request>
        <salary>123</salary>
        <newSalary>101</newSalary>
      </request>
      <request>
        <salary>101</salary>
        <newSalary>123</newSalary>
      </request>
      <request>
        <salary>100</salary>
        <newSalary>101</newSalary>
      </request>
    </input>
  </tns:testOperation>
</body>

100
101
123
101
101
123
100
101
我试图删除重复的“请求”节点,在那里我们有相同的工资和Neal薪值(NoDE1和NoDE4具有相同的值。所以我只需要考虑一个节点)。示例输出如下

<?xml version="1.0" encoding="UTF-8"?>
<body xmlns:bons0="http://DistinctAppSample" xmlns:httpsca="http://www.ibm.com/xmlns/prod/websphere/http/sca/6.1.0" xmlns:mq="http://www.ibm.com/xmlns/prod/websphere/mq/sca/6.0.0" xmlns:smo="http://www.ibm.com/websphere/sibx/smo/v6.0.1" xmlns:tns="http://DistinctAppSample/TestInf" xmlns:tns1="http://www.w3.org/2005/08/addressing" xmlns:tns2="http://www.w3.org/2003/05/soap-envelope" xmlns:tns_1="wsdl.http://DistinctAppSample/TestInf" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="foo.xsd">
  <tns:testOperation>
    <input>
      <request>
        <salary>100</salary>
        <newSalary>101</newSalary>
      </request>
      <request>
        <salary>123</salary>
        <newSalary>101</newSalary>
      </request>
      <request>
        <salary>101</salary>
        <newSalary>123</newSalary>
      </request>     
    </input>
  </tns:testOperation>
</body>

100
101
123
101
101
123
我需要编写一个XPATH来实现这个场景。 我已经尝试了
//请求[not(salary=previous::salary和newSalary=previous::newSalary)]
,但它没有按预期工作。任何暗示都是非常可取的


谢谢。

XPath是一种选择语言。它无法更改您的XML。您想选择某些节点还是创建新的XML文档?我想创建一个新的XML文档。使用XPATH选择XML节点并创建一个新的XML文件。啊,从您的标记中,我看到您已经准备好使用XSLT,这可能是完成这项工作的最佳工具。使用
搜索示例,尝试调整它们。当您有一些XSLT要显示时,请显示它。实际上,我不能直接使用XSLT。我有一个UI来做从输入节点到输出节点的映射,在内部将生成一个XSL文件。在UI中,我没有找到任何与之相关的内容。正如我最初所说,XPATH不能用于从旧的XML文件生成新的XML文件。它是一种查询语言,而不是文档创建语言。如果XSLT是由工具生成的,则需要具体说明该工具。XPath是一种选择语言。它无法更改您的XML。您想选择某些节点还是创建新的XML文档?我想创建一个新的XML文档。使用XPATH选择XML节点并创建一个新的XML文件。啊,从您的标记中,我看到您已经准备好使用XSLT,这可能是完成这项工作的最佳工具。使用
搜索示例,尝试调整它们。当您有一些XSLT要显示时,请显示它。实际上,我不能直接使用XSLT。我有一个UI来做从输入节点到输出节点的映射,在内部将生成一个XSL文件。在UI中,我没有找到任何与之相关的内容。正如我最初所说,XPATH不能用于从旧的XML文件生成新的XML文件。它是一种查询语言,而不是文档创建语言。如果XSLT是由一个工具生成的,则需要对该工具进行详细说明。