TL; DR;当我将xml文件解组为对象时,我需要在CDATA中保留新行。
我有一个xml文件(例如):
<xmlTag>
<![CDATA[<someXml>This content
is formatted</someXml>]]
</xmlTag>
我使用此代码将其转换为命名空间的对象(Filter和SAXSource只是因为输入xml没有命名空间,但生成的Class T确实如此):
public static <T> T transformFileToObject(File file, Class<T> clazz, XMLFilter filter) throws .. {
JAXBContext jc = JAXBContext.newInstance(clazz);
XMLReader reader = XMLReaderFactory.createXMLReader();
if (filter != null) {
filter.setParent(reader);
}
InputSource is = new InputSource(new FileInputStream(input));
SAXSource source = new SAXSource(filter, is);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (T) unmarshaller.unmarshal(source);
}
我的问题是,当我调用它时,我的xml被解析得很好。我得到一个看起来像这样的对象:
class XmlTag {
private String someXml = "This content is formatted";
}
这就是问题所在。字符串未格式化。从编组的角度来看,我已经看过很多这方面的讨论了,但我还没有看到任何相关的事情。
我已尝试设置编码以保留换行符,但它似乎无法正常工作。
我认为我可以制作一个黑客,将\ r \ n中的换行符交换到SOME_RESERVED_STRING并稍后在属性中交换它,但在我的用例中,可能有几个someXml实例,意味着我必须做丑陋的字符串操作。
TL; DR;当我将xml文件解组为对象时,我需要在CDATA中保留新行。
答案 0 :(得分:0)
根据http://www.w3.org/TR/2000/REC-xml-20001006#sec-line-ends,似乎不同的新行字符与标准新行字符均匀。
您是否有任何理由需要使用\r\n
而不仅仅是\n
?
答案 1 :(得分:0)
原来定义的xsd存在问题,因为它被定义为xsd:normalizedString,而不是xsd:string。
所以基本上我所做的任何事情都被该适配器无效。它在CDATA中开箱即用。