gpt4 book ai didi

java - 识别 XML 的内部节点

转载 作者:行者123 更新时间:2023-11-30 04:10:11 26 4
gpt4 key购买 nike

我使用:

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 个空格,例如:

<a>
<b>
<b_sub></b_sub>
</b>
<c></c>
</a>

对空格进行编号:

<a>
(4)<b>
(2)<b_sub></b_sub>
(4)</b>
(4)<c></c>
(2)</a>

我们可以识别具有 4 个空格(或者如果可能的话,具有 1 个制表符)的节点吗?

源代码:

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);

最佳答案

如果原始输入 XML 本身是缩进的,则输出器添加的缩进看起来将不正确。您可以尝试使用简单的 XSLT 来去除原始 XML 中的任何缩进,然后再重新缩进,而不是使用无操作身份转换器:

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);

关于java - 识别 XML 的内部节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com