Java 替换>&书信电报;,及;出现在XML节点内的字符
我有一个类似于这些主题中描述的问题Java 替换>&书信电报;,及;出现在XML节点内的字符,java,xml,regex,Java,Xml,Regex,我有一个类似于这些主题中描述的问题 1) 替换>,我强烈建议您不要使用正则表达式来解析XML,在这种情况下,您根本不应该使用正则表达式 您需要的是一个好的XML解析器/拖缆框架,例如or(由于文件的大小,我选择后者) 你基本上会把你读到的每一个流媒体事件推给一个作者 在使用读卡器实例解析文件时,一旦识别出字符事件,就不用直接编写它,而是将每个符号替换为其实体,并编写替换的字符串,而不是原始符号 注意:这是一个官方的StaX教程,让您开始学习。是JEE5参考页,其中包含其他信息 为什么要这样做而不
1) 替换>,我强烈建议您不要使用正则表达式来解析XML,在这种情况下,您根本不应该使用正则表达式 您需要的是一个好的XML解析器/拖缆框架,例如or(由于文件的大小,我选择后者) 你基本上会把你读到的每一个流媒体事件推给一个作者 在使用读卡器实例解析文件时,一旦识别出
字符
事件,就不用直接编写它,而是将每个符号替换为其实体,并编写替换的字符串
,而不是原始符号
注意:这是一个官方的StaX教程,让您开始学习。是JEE5参考页,其中包含其他信息
为什么要这样做而不是应用模式
并使用缓冲读取器
解析整个文件?
- 因为性能会很糟糕(针对5MB文件的每一行重新匹配
)模式
- 因为您的
模式必须非常复杂(因此,不可读,而且性能很差)
BufferedReader
,然后做这样的事情(需要大量的精雕细琢-不要照字面理解):
String killMe=“blah<>&”;
//这里唯一有价值的信息:检查节点中的字符
//跨越多条线-同样,需要大量的工作
Pattern请=Pattern.compile(“>(.+)这是一个困难的问题,因为据我所知,XML内容中有像><这样的标记,这是无效的XML。我最好的建议是找到一个好的XML解析器,希望它能处理您的问题。您想用<?为什么?>替换,而且您的前后语句是相同的。有什么特别的建议吗为什么不使用CDATA块?顺便说一句,我不会使用正则表达式来解决这个问题。@Philip:就我对这个问题的解释而言,OP实际上想用另一种方法来解决这个问题(即,使语法无效的XML在语法上有效)。至少在标题、链接和代码示例中提到了这一点。您的解释建议您根据对2的响应转到
,我不确定这是否可行:某个
另一个将转换为某个东西br/另一个,即使您考虑嵌套。我认为您应该修复任何问题生成此代码。(谢谢@BalusC)XML不是常规语言。它意味着:请不要尝试将其输入正则表达式。您只会得到痛苦。
<tag><anothertag>& < > </anothertag></tag> (before)
<tag><anothertag>& < > </anothertag></tag> (after).
String killMe = "<element>blah < > &</element>";
// only valuable piece of info here: checks for characters within a node
// across multiple lines - again, needs a lot of work
Pattern please = Pattern.compile(">(.+)</", Pattern.MULTILINE);
Matcher iWantToDie = please.matcher(killMe);
while (iWantToDie.find()) {
System.out.println("Uugh: " + iWantToDie.group(1));
System.out.println("LT: " + iWantToDie.group(1).replace("<", "<"));
System.out.println("GT: " + iWantToDie.group(1).replace(">", ">"));
System.out.println("AND: " + iWantToDie.group(1).replace("&", "&"));
}
Uugh: blah < > &
LT: blah < > &
GT: blah < > &
AND: blah < > <