Dom4j:用包裹所有元素标签

发布于 2024-10-28 03:47:34 字数 299 浏览 4 评论 0原文

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

    }

基本上,我想使用 //* xpath 选择所有元素,并将 元素标签包裹在每个元素周围。

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

    }

Basically, I would like to use //* xpath to select all elements, and wrap <any> element tags around every single elements.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葵雨 2024-11-04 03:47:34

这是我的代码,它使用 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>

希望这有帮助。

This is my code which uses xpath expression //* to avoid recursion as you've requested:

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

This is my output:

<?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>

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文