trnsformer.transform(DomSource, streamResult);
DomSource中的输入包含许多<br>
个标记,但我得到的是>
和<
,而不是<
而>
<br>
返回< br >
我知道< >
等同于<>
。如何使变换器类更改编码并返回<br>
?
XML创建者
public class CreatXML
{
public static void main(String[] args){
try {
File article = new File("article.txt");
Scanner scan = new Scanner (article);
StringBuilder str = new StringBuilder();
while (scan.hasNext())
{
str.append(scan.nextLine());
str.append("<br>");
}
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element body = doc.createElement("div");
doc.appendChild(body);
Attr classAttr = doc.createAttribute("class");
classAttr.setValue("code");
body.setAttributeNode(classAttr);
Element p = doc.createElement("p");
p.appendChild(doc.createTextNode(str.toString()));
body.appendChild(p);
TransformerFactory transFatory = TransformerFactory.newInstance();
Transformer transformer = transFatory.newTransformer();
DOMSource dom = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(dom, result);
System.out.println(writer.toString());
}catch (Exception e){e.printStackTrace();}
}
}
输入样本
<br>
这是一个输入样本<br>
输出
<?xml [stuff] ><div><p><br>
这是一个输入样本<br><br></p></div>
答案 0 :(得分:2)
问题在于:
p.appendChild(doc.createTextNode(str.toString()));
您的文档中没有任何<br>
个元素。您有一个<p>
元素,其文字内容包含四个字符<
,b
,r
和>
的出现次数。根据格式良好的XML,这些字符将以您所看到的方式进行编码。
换句话说,createTextNode
不会创建XML元素。
您需要创建单独的文本节点和元素节点,而不是StringBuilder:
while (scan.hasNext()) {
p.appendChild(doc.createTextNode(scan.nextLine()));
p.appendChild(doc.createElement("br"));
}