【问题标题】:java adding cdata to xml stringjava将cdata添加到xml字符串
【发布时间】:2014-08-03 23:30:28
【问题描述】:

我需要将 CDATA 添加到 xml 字符串以使用证书对其进行签名。

字符串看起来像:

<SignedContent>someparametres</SignedContent>

结果必须是这样的:

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

我该怎么做?请帮忙

附: xml字符串只有一行(删除了所有制表符、所有空格、BOM)

【问题讨论】:

  • 您使用的是什么 XML API?
  • 真的必须是 CDATA 吗?是否可以简单地对内容进行编码以在 xml 中使用(即 <SignedContent>someparameters</SignedContent>)?
  • @BrettOkken 是的,它必须是 CDATA

标签: java xml cdata


【解决方案1】:

听起来你只是想要:

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

【讨论】:

  • 如何将 cdata 添加到根元素为 SignedContent 的 xml 中。如果我像你写的那样添加 cdata,它看起来像&lt;SignedContent&gt;&lt;![CDATA[someparameters]]&gt;&lt;/SignedContent&gt;
  • @bakash_erni:不清楚你的意思。您在问题中显示的是 CDATA,其内容 is SignedContent。换句话说,您应该获取您的 SignedContent 元素,将其转换为文本,从中创建 CDATASection,并将其添加到其他节点。您不能拥有根节点本身就是 CDATA 的 XML 文档。
【解决方案2】:

这篇文章可能被保留,但我觉得我应该回应,这可能对其他人有所帮助。

        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();

你可以从这里玩...

【讨论】:

  • 糟糕,我的回答是 JAVA,因为问题没有指定任何语言
【解决方案3】:

使用 Java 的 + 运算符:

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

【讨论】:

  • 不要开始使用字符串操作来操作 XML 文档。失败的秘诀。
  • @JonSkeet CDATA 仅包含字符数据。它只不过是一个字符串。
  • 如果您要表示的文本恰好包含]]&gt;,那么祝您好运。我希望 XML API 能够立即清除该错误,而不是为您提供无效的 XML 文档。绕过 XML 模型并使用字符串几乎总是是个坏主意。
  • 确实如此。那么你的方法会立即突出这个问题,还是创建一个无效的文档?我相信后者——而通过使用 XML API,您可以在构建文档时获得验证,从而更容易发现问题。
猜你喜欢
  • 2011-08-11
  • 2012-12-18
  • 2013-03-10
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多