2014-06-13 140 views
2

我需要將CDATA添加到xml字符串以用證書對其進行簽名。java將cdata添加到xml字符串

字符串看起來像:

<SignedContent>someparametres</SignedContent> 

結果一定是這樣的:

<![CDATA[<SignedContent>someparametres</SignedContent>]]> 

我怎樣才能做到這一點?請幫助

P.S. XML字符串只有一個行(去除所有標籤,所有空格,BOM)

+0

什麼是您使用XML API? –

+0

它真的必須是CDATA嗎?內容是否可以簡單編碼以便在xml中使用(即<SignedContent>某些參數</SignedContent >)? –

+0

@BrettOkken是的,它必須是CDATA –

回答

6

這聽起來像你只是想:

Node cdata = doc.createCDATASection(text); 
parentElement.appendChild(cdata); 
+0

如何將cdata添加到根元素爲SignedContent的xml中。如果我像你寫的那樣添加cdata,它會看起來像'<![CDATA [someparameters]]>'。 –

+0

@bakash_erni:目前尚不清楚你的意思。你在問題中顯示的內容是* SignedContent。換句話說,你應該帶上你的SignedContent元素,將它轉換爲文本,從中創建一個CDATASection,並將它添加到其他節點。您不能擁有其根節點本身爲CDATA的XML文檔。 –

-1

使用Java類+操作:

"<![CDATA[" + "<SignedContent>someparametres</SignedContent>" + "]]>" 
+4

*請*不要使用字符串操作開始操作XML文檔。食譜失敗。 –

+0

@JonSkeet CDATA只包含字符數據。它不過是一個字符串。 – ceving

+0

祝你好運,如果你想表示的文字恰好包含']]>'。我希望XML API能立即清除錯誤,而不是給你一個無效的XML文檔。繞過XML模型並使用字符串幾乎總是一個壞主意。 –

1

這篇帖子可能是持有,但我覺得我應該回應,這可能會幫助別人。

 JAXBContext context = JAXBContext.newInstance(SignedContent.class); 
     Marshaller marshallerObj = context.createMarshaller(); 
     marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     StringWriter sw = new StringWriter(); 
     marshallerObj.marshal(signedContentObj, sw); 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     factory.setValidating(true); 
     factory.setExpandEntityReferences(false); 
     Document doc = factory.newDocumentBuilder().newDocument(); 
     doc.createCDATASection(sw.toString()).getData(); 

您可以在這裏玩...

+0

糟糕,我的回答是在JAVA中,因爲問題沒有指定任何語言 – Rasheed