当前位置: 首页 > 知识库问答 >
问题:

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

邹山
2023-03-14

我正在尝试转义字符串中的XML特殊字符。转义由静态方法处理,如下所示。

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

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

例如:

现在,为了得到正确的响应,我计划在静态方法中引入一个检查。通过使用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);    
         }
}

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

共有1个答案

李辉
2023-03-14
  • 第一:您正在做的是转义,而不是解析。
  • 第二:@JBNizet是对的:您这里有一个设计问题。您必须知道您应该在输入参数中接收什么样的数据:Weteher它是转义的、有效的XML还是非转义的XML。
  • 第三:作为一般规则,所有用户数据都应由程序以其普通的未格式化形式处理,并使用最特定的数据类型:整数的int,小数的浮动,文本的String等。然后,在序列化该数据时应该执行适当的格式。例如,在序列化为XML之前,必须正确放置节点和属性以形成特定的数据结构,并且必须转义用户数据以避免在其中出现特殊字符。相反,在读取XML(=parsing)时,必须进行非转义(但解析器已经完成了)。

结论:如果您使用标准XML解析器(DocumentBuilderFactory、SAXParser、XMLInputFactory)和序列化器(TransformerFactory、XMLOutputFactory),您甚至不应该在意是否使用了转义。他们都不应该在意你的客户端应用。

 类似资料:
  • 问题内容: 我目前正在使用DOM解析器来解析XHTML文档,例如: 我的问题是,当我的文档包含一个实体引用时,例如: 我的解析器为包含“€”而不是“€”的内容创建了一个Text节点。这就是说,它正在按预期的方式解析实体(XHTML 1.0 Strict DTD链接到ENTITIES Latin1 DTD,这反过来确定了“€”与“€”的对等)。 问题是,我不希望解析器执行此类操作

  • 问题内容: 我需要使用Java代码对URL进行编码,以避免使用特殊字符,例如空格和%和&… etc 问题答案: URL的构造很棘手,因为URL的不同部分对允许使用什么字符有不同的规则:例如,加号保留在URL的查询部分中,因为它表示空格,但在URL的路径部分中保留了一个空格。加号没有特殊含义,空格编码为“%20”。 RFC2396解释(在2.4.2节中),完整的URL始终采用其编码形式:您获取各个组

  • 问题内容: 我想问一个有关在Java中避免字符串重复的问题。 该 情境 是:以标签和属性像这样的一个XML: 使用JibX,此XML将在如下所示的类中进行编组/解组: 该程序是长时间的批处理,因此将创建,使用,复制产品对象。 好吧, 问题 是:当我使用 Eclipse内存分析器(MAT)之 类的软件分析执行时,我发现了几个重复的String。例如,在id属性中, PROD 值在2000个实例左右重

  • 我使用for循环将学生详细信息添加到ArrayList。当我给第二个学生提供详细信息时,它会覆盖第一个数据。螺柱类 将数据添加到ArrayList的主类。 输出:第二个数据[2,2]后的实际输出辊数[1]。预期输出应为卷号: A1姓名: F1 L1性别:男性年龄: 11体育赛事:标枪 报名号:A2姓名:F2 L2性别:女年龄:14体育项目:100米跑 报名号:A3姓名:F3 L3性别:男性年龄:1

  • 我有一根这样的绳子。 如何在Java中将字符串解析成多行?

  • 问题内容: 我得到了一个像这样的字符串 我该如何编写Java代码来解码编码字符,例如 在字符串中。是否有任何现有的类/方法可以对其进行解码? 谢谢。 问题答案: 要取消转义HTML / XML实体,请使用Apache Commons Lang 或homegrow one 。