为什么调用 setTextContent 没有出现在转换后的输出中?
Why does calling setTextContent not appear in the transformed output?
以下 dom 操作应该会产生不同的输出,但事实并非如此。 println 表明它已经工作,但根 node.toString() 或使用 Transformer 失败,结果相同。
private void markNewLinesInTextNodes(Node node) {
for(int i = 0 ; i < node.getChildNodes().getLength() ; i++) {
Node child = node.getChildNodes().item(i);
markNewLinesInTextNodes(child);
}
if (node instanceof Element) {
Element el = (Element) node;
if (el.getTagName().toLowerCase().equals("text")) {
el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
System.out.println(el.getTextContent());
}
}
}
这个有效:
if (el.getTagName().toLowerCase().equals("text")) {
el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
System.out.println(el.getTextContent());
然后:
你确定选择了吗?
如何输出?
试试看:
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(document),
new StreamResult(buffer));
String result= buffer.toString();
System.out.println(result);
以下 dom 操作应该会产生不同的输出,但事实并非如此。 println 表明它已经工作,但根 node.toString() 或使用 Transformer 失败,结果相同。
private void markNewLinesInTextNodes(Node node) {
for(int i = 0 ; i < node.getChildNodes().getLength() ; i++) {
Node child = node.getChildNodes().item(i);
markNewLinesInTextNodes(child);
}
if (node instanceof Element) {
Element el = (Element) node;
if (el.getTagName().toLowerCase().equals("text")) {
el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
System.out.println(el.getTextContent());
}
}
}
这个有效:
if (el.getTagName().toLowerCase().equals("text")) {
el.setTextContent(el.getTextContent().replaceAll("\n", "_LINEBREAK_"));
System.out.println(el.getTextContent());
然后:
你确定选择了吗?
如何输出?
试试看:
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(document),
new StreamResult(buffer));
String result= buffer.toString();
System.out.println(result);