2014-06-13 102 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