为什么 Transformer return < 和 > 而不是 < 和 >?
Why does Transformer return < and > instead of < and >?
trnsformer.transform(DomSource, streamResult);
DomSource 中的输入包含许多 <br>
标签,但我得到的是 >
和 <
而不是 <
和 >
<br>
return 作为 < br >
我知道 < >
等同于 <>
。我怎样才能让 transformer class 改变编码和 return <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>
问题出在这里:
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"));
}
trnsformer.transform(DomSource, streamResult);
DomSource 中的输入包含许多 <br>
标签,但我得到的是 >
和 <
而不是 <
和 >
<br>
return 作为 < br >
我知道 < >
等同于 <>
。我怎样才能让 transformer class 改变编码和 return <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>
问题出在这里:
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"));
}