我有一个XML字符串,它已存在于数据库中,但在解析此XML字符串时,我遇到了Parsing问题,因为我在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"> < "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>
基本上它应该逃避xml标记之间存在的XML特殊字符,因为在我的代码中我发送这个xml用于解析 请给我任何示例代码来执行此操作。 如果我有任何正则表达式模式,我可以在String的replaceAll方法中使用,这是很好的。
另请注意,数据存储为数据库中的xml字符串。
答案 0 :(得分:2)
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,并且急切(?
)因此同一行上的两个属性确实被视为两个。