为什么Transformer返回<和>而不是<和>?

时间:2016-03-07 03:59:13

标签: java xml transformer

trnsformer.transform(DomSource, streamResult);

DomSource中的输入包含许多<br>个标记,但我得到的是&gt&lt,而不是<> <br>返回&lt br &gt

我知道&lt &gt等同于<>。如何使变换器类更改编码并返回<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>&lt;br&gt;这是一个输入样本&lt;br&gt;&lt;br&gt;</p></div>

1 个答案:

答案 0 :(得分:2)

问题在于:

p.appendChild(doc.createTextNode(str.toString()));

您的文档中没有任何<br>个元素。您有一个<p>元素,其文字内容包含四个字符<br>的出现次数。根据格式良好的XML,这些字符将以您所看到的方式进行编码。

换句话说,createTextNode不会创建XML元素。

您需要创建单独的文本节点和元素节点,而不是StringBuilder:

while (scan.hasNext()) {
    p.appendChild(doc.createTextNode(scan.nextLine()));
    p.appendChild(doc.createElement("br"));
}