gpt4 book ai didi

java - 动态 xml 过滤和转换(在 Java 中)

转载 作者:行者123 更新时间:2023-11-30 07:38:56 25 4
gpt4 key购买 nike

我有一个 XML 文件,看起来像

<?xml version='1.0' encoding='UTF-8'?>
<root>
<node name="foo1" value="bar1" />
<node name="foo2" value="bar2" />
</root>

我有一个方法

String processBar(String bar)

我想结束

<?xml version='1.0' encoding='UTF-8'?>
<root>
<node name="foo1" value="processBar("bar1")" />
<node name="foo2" value="processBar("bar2")" />
</root>

有没有简单的方法来做到这一点?最好是Java。请注意,该文件太大而无法安全地完全加载到内存中。 XML中的数据大致是任意的,processBar可能很复杂,所以我不想使用正则表达式。

最佳答案

假设您的意思是用对所述属性值调用 processBar 的结果替换属性值...

使用 JDK 的 XSLT API运行以下命令:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:java="http://xml.apache.org/xalan/java"
extension-element-prefixes="java">
<xsl:template match="/root/node/@value">
<xsl:attribute name="value">
<xsl:value-of select="java:com.example.yourclass.processBar(string(.))"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>

这使用了 Xalan-Java扩展并采用静态方法。您可以获得对象的实例并将其存储在 xsl:variable 中,如下所示:

<xsl:variable name="frobber" select="java:com.example.Frobber.new()"/>
<xsl:value-of select="java:processBar($frobber, string(.))"/>

或者类似的东西。

这只适用于 Xalan,但由于这是与 JDK 一起分发的 XSLT 处理器,我怀疑使用 Xalan 会很麻烦。

关于java - 动态 xml 过滤和转换(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com