2015-11-10 44 views
1

TL; DR;當我將xml文件解組到一個對象時,我需要在CDATA中保留新行。在解密java中的xml時保留CDATA中的新行

我有一個XML文件(例如):

<xmlTag> 
     <![CDATA[<someXml>This content 
        is formatted</someXml>]]  
</xmlTag> 

我轉化成名稱空間的目的本與此代碼(過濾器和的SAXSource只是因爲輸入XML沒有命名空間,但生成的類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

原來定義的xsd存在問題,因爲它被定義爲xsd:normalizedString,而不是xsd:string。

所以基本上我做的任何事情都只是被適配器取消了。它可以在CDATA中使用。

0

根據http://www.w3.org/TR/2000/REC-xml-20001006#sec-line-ends看來,不同的新行字符被統一到標準的新行字符。 是否有任何理由需要使用\r\n而不僅僅是\n

+0

不是真的,不 - 但我的文件是從第三方下載的,我不想操縱它們(如果我找到解決方案,我會盡管)編輯:我做了一個「read xml as string,然後將其從字符串轉換爲對象「操作,這樣我可以在需要時操縱字符串。用\ n代替\ r \ n,但沒有效果。 –