Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Java 如何通过搜索某些节点并替换值来转换xml文件_Java_Xml_Xslt_Xalan - Fatal编程技术网

Java 如何通过搜索某些节点并替换值来转换xml文件

Java 如何通过搜索某些节点并替换值来转换xml文件,java,xml,xslt,xalan,Java,Xml,Xslt,Xalan,这是输入xml- <payload id="001"> <termsheet> <format>PDF</format> <city>New York</city> </termsheet> </payload> 我们大多数xml转换都使用Xalan,我们使用的是XSLT1.0 我想编写一个XSLT模板,将输入转换为下面的输出- <pay

这是输入xml-

<payload id="001">
    <termsheet>
          <format>PDF</format>
          <city>New York</city>
    </termsheet>
</payload>
我们大多数xml转换都使用Xalan,我们使用的是XSLT1.0 我想编写一个XSLT模板,将输入转换为下面的输出-

<payload id="001">
    <termsheet>
          <format>pdf</format>
          <city>Mr. ABC</city>
    </termsheet>
</payload>
我试了很多答案,但还是绕不开这个问题


抱歉说得不清楚,托洛尔过于简单化了。我想使用城市名称并调用一个java方法,该方法将从该城市返回一个业务联系人。我更新了原始问题

我认为最简单的方法是将java扩展与Xalan结合使用,您可以编写一个简单的java类来实现所需的业务逻辑,然后从xslt调用它。样式表非常简单

 <xsl:stylesheet version="1.0" 
    xmlns:java="http://xml.apache.org/xalan/java"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    exclude-result-prefixes="java">

    <xsl:template match='node() | @*'>
        <xsl:copy>
            <xsl:apply-templates select ='node()|@*'></xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="termsheet/city">
        <xsl:copy>
            <xsl:value-of select='java:org.example.Card.getName(.)'/>
        </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet>

还有其他方法可以做到这一点,你真的应该关注一下有关

非常感谢的副本的文档!!!我一直在努力进行xpath匹配,而您的解决方案非常有效。有没有一种方法可以避免手动指定标记并使用xslt派生它?我猜您是在按照说明思考,我更新了答案。
package org.example

public class Card {

  public static String getName(String id) {
     // put here your code to get what you need 
     return "Mr. ABC"
  }
}