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

标签 java xml xslt xalan

这是输入 xml -

<payload id="001">
    <termsheet>
          <format>PDF</format>
          <city>New York</city>
    </termsheet>
</payload>

我们使用 Xalan 进行大部分 xml 转换,并且使用 XSLT 1.0 我想编写一个 XSLT 模板,它将输入转换为以下输出 -

<payload id="001">
    <termsheet>
          <format>pdf</format>
          <city>Mr. ABC</city>
    </termsheet>
</payload>

我尝试了很多关于SO的答案,但无法解决这个问题。

<小时/>

抱歉不太清楚,toLower 过于简单化了。我想使用城市名称并调用一个 java 方法,该方法将返回该城市的业务联系人。我已经更新了原来的问题

最佳答案

我认为最简单的方法是使用Xalan的java扩展,你可以编写一个简单的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>

你还需要编写调用的java类

package org.example

public class Card {

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

还有其他方法可以做到这一点,您应该真正关注有关 xalan extensions 的文档。

关于java - 如何通过搜索某些节点并替换值来转换 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47322789/

相关文章:

php - 如何从 magento 1 模板调用 block 方法

xslt - 使用XPath选择具有特定属性值的连续元素

javax.xml.transform.Transformer 忽略前缀?

xml - SSRS 报告上的 XSLT

java - 什么时候调用 toString() 方法

java - 无法解析符号 'R'

Java:有没有办法将文本转换为类?

java - Stream.reduce 始终保持并行无序流的顺序

c# - 路径中的非法字符 - C#,读取 xml

xml - XPATH查询使用xml中的值