gpt4 book ai didi

java - 在 java 中使用正则表达式修改 xml

转载 作者:行者123 更新时间:2023-11-29 06:02:39 25 4
gpt4 key购买 nike

我试图通过在 java 中使用正则表达式来更改 xml,但我找不到正确的方法。我有一个这样的 xml(简化):

<ROOT>
<NODE ord="1" />
<NODE ord="3,2" />
</ROOT>

xml 实际上用两种语言显示了一个句子及其节点、 block ……并且具有更多属性。它在两个 RichTextAreas 中加载每个句子(一个用于源句子,另一个用于翻译后的句子)。

我需要做的是向每个在其 ord 属性中具有特定值的节点添加一个样式属性(此样式属性将显示两种语言之间的对应关系,就像当您将鼠标悬停在一个词上时谷歌翻译所做的那样)。我知道这可以使用 DOM 来完成(获取所有 NODE 节点,然后一个一个地查看 ord 属性),但我正在寻找最快的方法来进行更改,因为它将在我的 GWT 的客户端执行应用程序。

当该 ord 属性具有单个值时(如在第一个节点中),只需将 xml 作为字符串并使用 replaceAll() 函数即可轻松完成。问题是当属性具有组合值时(如在第二个节点中)。

例如,如果我要查找的值为 2,我该如何添加该属性?我相信这可以使用正则表达式来完成,但我不知道如何做。任何提示或帮助将不胜感激(即使它不使用 regexp 和 replaceAll 函数)。

提前致谢。

最佳答案

XPath 可以为您做到这一点。您可以选择:

/ROOT/NODE[contains(concat(',', @ord, ','), ',2,')]

由于您打算在客户端使用 GWT,您可以提供 gwtxslt一试。有了它,您可以指定一个 XSLT 样式表来为您进行转换(即添加属性):

XsltProcessor processor = new XsltProcessor();
processor.importStyleSheet(styleSheetText);
processor.importSource(sourceText);
processor.setParameter("ord", "2");
processor.setParameter("style", "whatever");
String resultString = processor.transform();
// do something with resultString

其中 styleSheetText 可以是符合以下行的 XSLT 文档

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="ord" select="''" />
<xsl:param name="style" select="''" />

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

<xsl:template match="NODE">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:if test="contains(concat(',', @ord, ','), concat(',', $ord, ','))">
<xsl:attribute name="style">
<xsl:value-of select="$style" />
</xsl:attribute>
</xsl:if>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

请注意,我使用 concat() 来防止 @ord 的属性值实际上是逗号分隔列表中的部分匹配。

关于java - 在 java 中使用正则表达式修改 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588779/

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