gpt4 book ai didi

java - 需要转义 java 中 XML 标签(<、>、')之间存在的一些特殊字符

转载 作者:行者123 更新时间:2023-11-30 03:24:22 25 4
gpt4 key购买 nike

我有一个 XML 字符串,该字符串已存在于数据库中,但在解析此 XML 字符串时,我遇到了解析问题,因为 XML 标记之间有特殊字符,例如 (<,>,')。

我使用了名为 StringEscapeUtils.escapeXml 的 API,但它也会转义 xml 标签。我不想转义 xml 标签。我只想转义标签值。

以下是我的 xml 字符串:-

<start>
<attribute name="resourcePageCategory"> <"there 'is' no category"></attribute>
<attribute name="resourceType" />
<attribute name="fairMarketValue">1000</attribute>
<attribute name="transferReason" />
<attribute name="effectiveDate" />
<attribute name="amountOwed">10</attribute>
</start>

预期输出应该是这样的:-

<start>
<attribute name="resourcePageCategory"> &lt; &quot;there &apos;is&apos; no category&quot;&gt;</attribute>
<attribute name="resourceType" />
<attribute name="fairMarketValue">1000</attribute>
<attribute name="transferReason" />
<attribute name="effectiveDate" />
<attribute name="amountOwed">10</attribute>
</start>

基本上,它应该转义 xml 标记之间存在的 XML 特殊字符,因为在我的代码中,我发送此 xml 进行解析请给我任何示例代码来执行此操作。如果我有任何可以在字符串的 ReplaceAll 方法中使用的正则表达式模式,那就太好了。

还要注意,数据以 xml 字符串形式存储在数据库中。

最佳答案

public static String repair(String xml) {
Pattern pattern = Pattern.compile("(<attribute name=\"[^\"]+\">)(.*?)(</attribute>)");
Matcher m = pattern.matcher(xml);
StringBuffer buf = new StringBuffer(xml.length() + xml.length() / 32);
while (m.find()) {
String escaped = StringEscapeUtils.escapeXml(m.group(2));
m.appendReplacement(buf, m.group(1) + escaped + m.group(3));
}
m.appendTail(buf);
return buf.toString();
}

.*? 暂时不允许换行,为此添加 DOTALL,并且急切 (?),因此同一行上的两个属性确实被视为两个。

关于java - 需要转义 java 中 XML 标签(<、>、')之间存在的一些特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615379/

25 4 0