创建CDATA节是混乱

我想创建描述字段中CDATA部分,但失败了。 该代码非常简单,但在生成的XML CDATA部分没有出现!

Node de = document.createElement("description"); de.appendChild(document.createCDATASection(reportData.getIssue().getDescription() + "more]]>data")); e.appendChild(de);

在结果XML,我得到:

<description>Room #1128 has AD issues.more]]&gt;data</description>

我在做什么错了?

--------------解决方案-------------

序列]]>结束CDATA节,因此可以在CDATA部分不会出现。

您的XML库恢复由开沟CDATA节,并使用实体,将有特殊含义的字符。

由于<foo><![CDATA[Hello, world>]]></foo><foo>Hello, world&gt;</foo>是等价的,这是没有问题的(除非有人试图解析生成的XML有一个工具,不是一个XML解析器,这路就疯狂)。

使用下面的方法:

CDATASection cdata = document.createCDATASection("");

您应指定CDATA部分元素(S)。

你可以像下面这样做;

transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "tagName");

如果要指定多个CDATA节元素中使用空格作为分隔符。

transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "tagName1 tagName2");

全码

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("catalog");
doc.appendChild(rootElement);

Element description = doc.createElement("description");
description.appendChild(doc.createCDATASection("/&(*/**SOME STRANGE DESCRIPTION**ĞĞÜ656*9/*9^+%3ÜĞPÜ"));
rootElement.appendChild(description);

Element books = doc.createElement("books");
rootElement.appendChild(books);

Element book = doc.createElement("book");
books.appendChild(book);

Element author = doc.createElement("author");
author.appendChild(doc.createCDATASection("&/(&/(QNzxB5yiBibGj2MM ÇÖÇÇ"));
book.appendChild(author);

Element price = doc.createElement("price");
price.appendChild(doc.createTextNode("50.5"));
book.appendChild(price);

Element title = doc.createElement("title");
title.appendChild(doc.createTextNode("my book title"));
book.appendChild(title);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "description author descr");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

DOMSource source = new DOMSource(doc);

StreamResult result = new StreamResult(System.out);

transformer.transform(source, result);

结果会是这样的;

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<description><![CDATA[/&(*/**SOME STRANGE DESCRIPTION**ĞĞÜ656*9/*9^+%3ÜĞPÜ]]></description>
<books>
<book>
<author><![CDATA[&/(&/(QNzxB5yiBibGj2MM ÇÖÇÇ]]></author>
<price>50.5</price>
<title>my book title</title>
</book>
</books>
</catalog>

如果我们想申请您的确切试样(数据+“]”);

String someInfo = "example-info";
Element dscr = doc.createElement("descr");
dscr.appendChild(doc.createCDATASection(someInfo + "more]]>data"));
book.appendChild(dscr);

那么结果会是这样的;

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<description><![CDATA[/&(*/**SOME STRANGE DESCRIPTION**ĞĞÜ656*9/*9^+%3ÜĞPÜ]]></description>
<books>
<book>
<author><![CDATA[&/(&/(QNzxB5yiBibGj2MM ÇÖÇÇ]]></author>
<price>50.5</price>
<title>my book title</title>
<descr><![CDATA[example-infomore]]]]><![CDATA[>data]]></descr>
</book>
</books>
</catalog>

你可以不写>中的XML数据。
它被转义成&gt;大于)

请注意, 大于号会搞乱你的</description>标记,因为结束标记它的开始。

你可以在这里阅读有关(其他地方)

分类:java的 时间:2015-03-15 人气:1
本文关键词: XML,JAVA,CDATA
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 5.118 (s). 10 q(s)