【发布时间】:2015-07-15 15:40:40
【问题描述】:
我正在尝试编写一个小类来转义 XML 文档中的字符。我正在使用 xpath 来获取 XML 文档的节点,并将每个节点传递给我的类。但是,它不起作用。我想改变:
"I would like a burger & fries."
到
"I would like a burger & fries."
这是我班级的代码:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class MyReplace{
private static final HashMap<String,String> xmlCharactersToBeEscaped;
private Iterator iterator;
private String newNode;
private String mapKey;
private String mapValue;
static {
xmlCharactersToBeEscaped = new HashMap<String,String>();
xmlCharactersToBeEscaped.put("\"",""");
xmlCharactersToBeEscaped.put("'","'");
xmlCharactersToBeEscaped.put("<","<");
xmlCharactersToBeEscaped.put(">",">");
xmlCharactersToBeEscaped.put("&","&");
}
public String replaceSpecialChar(String node){
if(node != null){
newNode = node;
iterator = xmlCharactersToBeEscaped.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry mapEntry = (Map.Entry) iterator.next();
mapKey = mapEntry.getKey().toString();
mapValue = mapEntry.getValue().toString();
if(newNode.contains(mapKey)){
newNode = newNode.replace(mapKey,mapValue);
}
}
return newNode;
} else {
return node;
}
}
}
正在发生的事情是它正在替换地图中的第一个特殊字符、引号,并跳过其他所有内容。
【问题讨论】:
-
天哪,这是我一生中见过的最不必要的复杂字符串替换方法。您肯定听说过
String.replace吗?或者只是使用内置的 XML 库。无论如何,他们都会为你做这一切。 stackoverflow.com/questions/439298/… -
@tnw OP 对 String 实例执行替换,但是,我同意,访问过于复杂。
-
这就是我正在使用的。我想要做的是遍历一组 5 个不同的“字符串”并将它们全部替换。另外,我想在它自己的班级里这样做。
-
你能显示你的输入测试文件和输出吗?
-
他们的意思是你不需要检查字符串是否包含要替换的东西,如果不存在,replace 只需返回原始字符串。此外,
mapKey = mapEntry.getKey().toString();是多余的,toString()在字符串中返回自身,mapKey = mapEntry.getKey();将起作用。