首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML内部节点的标识

XML内部节点的标识
EN

Stack Overflow用户
提问于 2013-11-06 09:36:40
回答 1查看 252关注 0票数 1

我用:

代码语言:javascript
复制
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

在这个问题中,Java: How to Indent XML Generated by Transformer,但正如有人说的:它并没有像我们期望的那样对内部节点起作用(它确实识别了它们,但没有使用4个空格)。

因此,它是第一级的4个空格,下一个层次的2个空格,例如:

代码语言:javascript
复制
<a>
    <b>
      <b_sub></b_sub>
    </b>
    <c></c>
  </a>

空间编号:

代码语言:javascript
复制
<a>
 (4)<b>
   (2)<b_sub></b_sub>
 (4)</b>
 (4)<c></c>
(2)</a>

我们能用4个空格(如果可能的话用一个制表符)来标识节点吗?

源代码:

代码语言:javascript
复制
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
Document doc = documentBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();

NodeList rootlist = doc.getElementsByTagName("root_node"); //(example name)
Node root = rootlist.item(0);

root.appendChild(...);

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("output.xml"));

transformer.transform(source, result);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-06 17:29:19

如果原始输入XML本身是缩进的,则输出程序添加的缩进将不正确。您可以尝试使用简单的XSLT来删除原始XML中的任何缩进,而不是使用无操作标识转换器:

代码语言:javascript
复制
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Source xsltSource = new StreamSource(new StringReader(
  "<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'\n"
+ "    xmlns:xalan='http://xml.apache.org/xalan'>\n"
+ "  <xsl:strip-space elements='*' />\n"
+ "  <xsl:output method='xml' indent='yes' xalan:indent-amount='4' />\n"
+ "  <xsl:template match='/'><xsl:copy-of select='node()' /></xsl:template>\n"
+ "</xsl:stylesheet>"
));
Transformer transformer = transformerFactory.newTransformer(xsltSource);

DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File("output.xml"));

transformer.transform(source, result);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19808441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档