我有一个XML数据字符串。删除一些节点后添加几个节点。 xml数据中包含大量空格(在节点删除期间创建)。
<A>
<B>
</B>
<!-- some node i deleted and lot of white spaces -->
<c>
</c>
<!-- some more node i deleted and lot of white spaces -->
<E>
</E>
字符串操作后的所需输出
<A>
<B>
</B>
<c>
</c>
<E>
</E>
</A>
我可以使用replaceAll(“\ s”,“”),但这会删除新行字符,并使xml不在结构中以便在UI中显示。
有没有办法在不修剪新行字符的情况下修剪它?
编辑:此XML数据是OMElement
的一部分答案 0 :(得分:3)
str = str.replaceAll("[ \t\x0B\f\r]", "");
...或者,您是否意味着要删除无关的新行?
str = str.replaceAll("\n{2,}", "\n");
...或者您只想删除文字' '
空格?
str = str.replace(" ", "");
答案 1 :(得分:2)
尝试使用someString.replaceAll("\\u0020","")
这个字符串是空格的编码,应该完成工作
编辑: 如果您需要其他人,请查看this question。你会在基督的答案中找到其他人。
答案 2 :(得分:2)
我建议使用正则表达式str.replaceAll("(</[^>]+>)\\s+(<[^>]+>)","$1\n$2")
来检测标记之间的空格并将其删除。它只提供单行结束
答案 3 :(得分:1)
如果您使用DocumentBuilder修改XML,那么您也可以使用以下方法。
DocumentBuilderFactory.setIgnoringElementContentWhitespace
指定此工厂创建的解析器必须消除元素内容中的空格(有时称为“可忽略的空格”)
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
答案 4 :(得分:0)
这样做的代价很高。
Scanner scanner = new Scanner(str);
StringBuffer strBuff = new StringBuffer();
while(scanner.hasNextLine()){
String line = scanner.nextLine();
if(line.length() > 0 && !line.trim().equals("")){
strBuff.append("\n");
strBuff.append(line);
}
}
最后,当循环结束时,我们可以从xml中删除空行,并且xml将很好地形成。正如您所看到的,这对于大型xml并不理想,因为许多xml字符串对象是在内部创建的。
问候
Dheeraj Joshi