Java中的XML转义字符

时间:2015-08-05 05:56:26

标签: java xml

我有一个写入xml的对象。 xml有转义符号,如"&","<"在我处理这个xml之前,我想要一个实用程序来转义这些特殊字符,以便生成的xml具有&其次是" amp;"为"&"和"&"然后是" lt;" for"<"。我尝试过StringUtils,XMLWriter等等,但是他们转换了"<"在打开和关闭标签以及我不想要的。我只想要"<"在要替换的属性值中。请帮忙。 例;

我输入xml作为

<?xml version="1.0" encoding="UTF-8"?>
<personName><firstName>Sam & Pat </firstName>
<sal> > than 10000 </sal>

预期的xml应该是`

<?xml version="1.0" encoding="UTF-8"?>
<personName><firstName>Sam &amp; Pat </firstName>
<sal> &lt; than 10000 </sal>

如果我使用StringEUtils,它会转换所有&#34;&lt;&#34;像这样的人物

&lt;sal&gt; &lt; than 10000 &lt;/sal&gt;

编辑:我实际上无法使用JaxB。我正在使用FreeMarkerTemplate来做到这一点。这是代码。

File tempFile = File.createTempFile(fileName, ".tmp");
try (FileWriter writer = new FileWriter(tempFile)) {
freeMarkerConfig.setOutputEncoding(UTF_8);
    Template template = freeMarkerConfig.getTemplate(templateName);
    template.process(data, writer);
}              `                                                                                                    
The resultant file which get created should have the handled escape characters.

4 个答案:

答案 0 :(得分:0)

您可以使用JAXB进行XML生成。使用@XmlRootElement

注释您的Model-Class

然后您可以使用JAXB来编组XML-Object:

try {
  JAXBContext context = JAXBContext.newInstance(Person.class);

  Marshaller m = context.createMarshaller();
  m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

  Person object = new Person();
  object.setPersonName("Sam & Pat");
  object.setSal("> than 10000");

  m.marshal(object, System.out);
} catch (JAXBException e) {
  e.printStackTrace();
}

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
    <personName>Sam &amp; Pat</personName>
    <sal>&gt; than 10000</sal>
</person>

答案 1 :(得分:0)

使用CDATA可以解决您的问题。

例如<![CDATA[abc]]>

答案 2 :(得分:0)

您还可以使用Apache Commons Lang Library来转义字符:

示例:

    String escapeString1 = "Sam & Pat ";
    System.out.println("Escaped : " + StringEscapeUtils.escapeXml11(escapeString1));

    String escapeString2 = " > than 10000";
    System.out.println("Escaped : " + StringEscapeUtils.escapeXml11(escapeString2));

输出:

Escaped : Sam &amp; Pat 
Escaped :  &gt; than 10000

答案 3 :(得分:0)

您可以在XPL中包含XML特殊字符。 XPL与XML具有完全相同的结构,但允许文本字段中的特殊字符。 http://hll.nu/