Я хотел бы предложить вам рекурсивное решение, которое использует метод Node#replaceChild
для замены узла новым тегом:
public static void paintAllNodes(Node node) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element somethingElement = node.getOwnerDocument().createElement("something");
somethingElement.setAttribute("style", "background-color:red");
node.getParentNode().replaceChild(somethingElement, node);
somethingElement.appendChild(node);
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
paintAllNodes(nodeList.item(i));
}
}
}
Это моя главная:
public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("document.xml"));
paintAllNodes(document.getDocumentElement());
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}
Я проверил это с помощью этого xml:
<html>
<head>
<title>title</title>
</head>
<body>
<h1>title</h1>
<div>test</div>
</body>
</html>
Мой главный распечатал этот новый xml, который, кажется, вам нужен:
<?xml version="1.0" encoding="UTF-8"?><something style="background-color:red"><html>
<something style="background-color:red"><head>
<something style="background-color:red"><title>title</title></something>
</head></something>
<something style="background-color:red"><body>
<something style="background-color:red"><h1>title</h1></something>
<something style="background-color:red"><div>test</div></something>
</body></something>
</html></something>
Надеюсь, это поможет.