gpt4 book ai didi

java - 如何避免JAVA中重复解析XML特殊字符

转载 作者:行者123 更新时间:2023-11-30 06:41:09 28 4
gpt4 key购买 nike

我试图转义字符串中的 XML 特殊字符。转义是通过静态方法来处理的,如下所示。

public static String escapeXml10(String response) {
return StringEscapeUtils.escapeXml10(response);
}

现在这种实现的问题是,我得到一段可能会或可能不会被解析的字符串。这会导致输出不规则。

例如:

  1. & -> &(此字符串不会按照不同的流程进行解析)
  2. & -> & (该字符串由流解析一次,现在由我的代码解析)。

现在为了获得正确的响应,我计划在静态方法中引入检查。使用 if 条件如下。

public static String escapeXml10(String response) {
if(response.contains("&") ||
response.contains("<") ||
response.contains(">") ||
response.contains("'") ||
response.contains(""")){
return response;
}else{
return StringEscapeUtils.escapeXml10(response);
}
}

这是正确的实现方式吗?如果不正确,请提出建议?

最佳答案

  • 第一:您所做的是转义,而不是解析
  • 第二:@JBNizet 是对的:你这里有一个设计问题。您必须知道您应该在输入参数中接收哪种类型的数据:是转义的有效 XML 还是非转义的 XML。
  • 第三:作为一般规则,所有用户数据都应由程序以简单的无格式形式进行处理,并使用最具体的数据类型:int整数,floatdouble 表示小数,String 表示文本等。然后,应该在序列化该数据时完成正确的格式。例如,在序列化为XML之前,必须正确放置节点和属性以形成特定的数据结构,并且必须对用户数据进行转义以避免其中出现特殊字符。相反,在读取 XML(=解析)时,必须完成转义(但这已经由解析器完成)。

结论:如果您使用标准 XML 解析器( DocumentBuilderFactorySAXParserXMLInputFactory )和序列化器( TransformerFactoryXMLOutputFactory ),您甚至不应该关心转义。两者都不应该关心您的客户端应用程序。

关于java - 如何避免JAVA中重复解析XML特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44352843/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com