我有一个不正确的xml字符串,我想构建一个正确的
<root val="yyy">
<fol der val="attribute 1">myfolder</folder>
</root>
问题是标签内的空白区域:“fol der”。 可以替换&lt;内部的空白区域。 &GT;在java中使用正则表达式的标签(但不是内部属性)? 感谢所有
答案 0 :(得分:2)
我会使用(?<=[<]\w*)\s+
,但java的正则表达式引擎不支持lookbehind中的量词..
如果有多个空格,则必须这样做。
Matcher m=Pattern.compile("(?<=[<])(/?)\\s*(\\w*)\\s+(?!\\w+\\s*=)").matcher(xml);
while(m.find())
{
xml=m.replaceAll("$1$2");
m.reset(xml);
}
虽然这不适用于属性名称
答案 1 :(得分:0)
可能不是你想听到的,但这是解决错误问题的错误工具。经验法则是,不要尝试使用正则表达式自己解析/处理XML文件。如果您的XML不正确/无效,那么您应该与提供它的人解决问题,而不是如何解决它。
答案 2 :(得分:0)
如果您的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>