0
 public static void paintAllNodes(org.w3c.dom.Document domDocument) {
        DOMReader reader = new DOMReader();
        org.dom4j.Document dom4jdoc = reader.read(domDocument);

    }

基本的に、//*xpathを使用してすべての要素を選択し、<any>要素タグをすべての要素にラップしたいと思います。

4

1 に答える 1

1

//*これは、要求されたとおりに再帰を回避するためにxpath式を使用する私のコードです。

public static void main(String[] args) throws DocumentException {
    SAXReader saxReader = new SAXReader();
    String xml = "<html><head><title>title</title></head><body><h1>title</h1></body></html>";
    Document document = saxReader.read(new StringReader(xml));

    List nodes = document.selectNodes("//*");
    for (Iterator<Node> iterator = nodes.iterator(); iterator.hasNext();) {
        Node currentNode = iterator.next();
        DefaultElement newElement = new DefaultElement("any");
        Element parent = currentNode.getParent();
        if (parent != null) {
            List contentList = parent.content();
            int index = contentList.indexOf(currentNode);
            parent.remove(currentNode);
            newElement.add(currentNode);
            contentList.add(index, newElement);
        }
    }

    Element rootElement = document.getRootElement();
    DefaultElement newRootElement = new DefaultElement("any");
    document.setRootElement(newRootElement);
    newRootElement.add(rootElement);
    System.out.println(document.asXML());
}

これは私の出力です:

<?xml version="1.0" encoding="UTF-8"?>
<any><html><any><head><any><title>title</title></any></head></any><any><body><any><h1>title</h1></any></body></any></html></any>

お役に立てれば。

于 2011-04-01T10:22:33.617 に答える