我有一个写入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 & Pat </firstName>
<sal> < than 10000 </sal>
如果我使用StringEUtils,它会转换所有&#34;&lt;&#34;像这样的人物
<sal> < than 10000 </sal>
编辑:我实际上无法使用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.
答案 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 & Pat</personName>
<sal>> 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 & Pat
Escaped : > than 10000
答案 3 :(得分:0)
您可以在XPL中包含XML特殊字符。 XPL与XML具有完全相同的结构,但允许文本字段中的特殊字符。 http://hll.nu/