Как удалить корневой узел документа XML с помощью DOM - PullRequest
3 голосов
/ 17 ноября 2010

Я хочу удалить оболочку из следующего XML-документа с использованием API DOM

<hs:PageWrapper>
    <div id="botton1"/>
    <div id="botton2"/>
</hs:PageWrapper>

, чтобы в качестве окончательного результата у меня были только эти данные:

<div id="botton1"/>
<div id="botton2"/>

Как можноя делаю это на Java?

1 Ответ

4 голосов
/ 17 ноября 2010

То, что вы хотите сделать, не приведет к правильно сформированному XML, поскольку в корне документа будет 2 элемента.Тем не менее, код, чтобы сделать то, что вы хотите, ниже.Он получает дочерние узлы элемента-оболочки, создает новый документ для каждого узла, импортирует узел в документ и записывает документ в строку.

    public String peel(String xmlString) {
    StringWriter writer = new StringWriter();
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new InputSource(new StringReader(
                xmlString)));
        NodeList nodes = document.getDocumentElement().getChildNodes();
        for (int i = 0; i < nodes.getLength(); i++) {
            Node n = nodes.item(i);
            Document d = builder.newDocument();
            Node newNode = d.importNode(n, true);
            d.insertBefore(newNode, null);
            writeOutDOM(d, writer);
        }
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (TransformerFactoryConfigurationError e) {
        e.printStackTrace();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return writer.toString();
}

protected void writeOutDOM(Document doc, Writer writer) 
     throws TransformerFactoryConfigurationError, TransformerException {
    Result result = new StreamResult(writer);
    DOMSource domSource = new DOMSource(doc);
    Transformer transformer = TransformerFactory.newInstance()
            .newTransformer();
    transformer.setOutputProperty("omit-xml-declaration", "yes");
    transformer.transform(domSource, result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...