我有一个不正确的 xml 字符串,我想建立一个正确的
<root val="yyy">
<fol der val="attribute 1">myfolder</folder>
</root>
问题是标签内的空白:“文件夹”。可以在java中使用正则表达式替换<>标签内的空格(但不能在属性内)?谢谢大家
我会使用(?<=[<]\w*)\s+
,但 java 的正则表达式引擎不支持后视中的量词..
如果有多个空格,则必须这样做。
Matcher m=Pattern.compile("(?<=[<])(/?)\\s*(\\w*)\\s+(?!\\w+\\s*=)").matcher(xml);
while(m.find())
{
xml=m.replaceAll("$1$2");
m.reset(xml);
}
虽然这不适用于属性名称
可能不是您想听到的,但这是解决错误问题的错误工具。经验法则是,不要尝试使用正则表达式自己解析/处理 XML 文件。如果您收到了不正确/无效的 XML,那么您应该与提供它的人一起解决这个问题,而不是如何修复它。
如果你的 XML 是这样的:
<root val="yyy">
<fo l der val="attribute 1">myfol d er</folder>
</root>
以下应该工作:
final Pattern p = Pattern.compile("(?s)(?<=<).*?(?=/?>|\\s*\\w+\\s*=)");
Matcher m = p.matcher(data); // your XML
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group().replace(" ", ""));
}
m.appendTail(sb);
data = sb.toString();
System.out.println(data);
输出:
<root val="yyy">
<folder val="attribute 1">myfol d er</folder>
</root>