我有以下课程:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "item", propOrder = {
"content"
})
public class Item {
@XmlElementRefs({
@XmlElementRef(name = "ruleref", type = JAXBElement.class, required = false),
@XmlElementRef(name = "tag", type = JAXBElement.class, required = false),
@XmlElementRef(name = "one-of", type = JAXBElement.class, required = false),
@XmlElementRef(name = "item", type = JAXBElement.class, required = false)
})
@XmlMixed
protected List<Serializable> content;
元素可以包含带引号的字符串,例如:
<tag>"some kind of text"</tag>
此外,item元素本身可以包含带引号的字符串:
<item>Some text, "this has string"</item>
使用Moxy时生成的XML会转义标记和项元素中的文本值:
<tag>"e;some kind of text"e;</tag>
我如何阻止它这样做,但仅限于这些元素?属性和其他元素应保持不变(我意味着转义)。
谢谢。
答案 0 :(得分:2)
您可以通过提供自己的CharacterEscapeHandler
来覆盖默认字符转义。
<强>富强>
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Foo {
private String bar;
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
<强>演示强>
import java.io.*;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.MarshallerProperties;
import org.eclipse.persistence.oxm.CharacterEscapeHandler;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Foo foo = new Foo();
foo.setBar("\"Hello World\"");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(foo, System.out);
marshaller.setProperty(MarshallerProperties.CHARACTER_ESCAPE_HANDLER, new CharacterEscapeHandler() {
@Override
public void escape(char[] buffer, int start, int length,
boolean isAttributeValue, Writer out) throws IOException {
out.write(buffer, start, length);
}
});
marshaller.marshal(foo, System.out);
}
}
<强>输出强>
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>"Hello World"</bar>
</foo>
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar>"Hello World"</bar>
</foo>