在 DOm java 中获取嵌套的 xml 文档

Get nested xml document in DOm java

我想做什么? - 我正在尝试将下面 xml 中的 InputData 文档提取为 XML(而不是元素的 textContent ).

<?xml version="1.0" encoding="UTF-8"?>
<Test>
     <Identifier>1</Identifier>
     <Mode>SYNCHRONOUS</Mode>
     <Callback>null</Callback>
     <InputData>
               <iid>
                   <test3>p</test3>
                   <test4>p1</test4>
              </iid>
     </InputData>
</Test>

当我执行 node.item(i).textContent() 时,我希望输出为:

          <iid>
               <test3>p</test3>
               <test4>p1</test4>
          </iid>

问题代码是什么? -

 private void doProcessing(Document xmldoc) {

            Element rootEliment = xmldoc.getDocumentElement();
            // System.out.println("NodeName : "+rootEliment.getNodeName());
            NodeList children = rootEliment.getChildNodes();
            NamedNodeMap nnl = rootEliment.getAttributes();

            Node inputdata = nnl.getNamedItem("InputData");
            // inputdata.getOwnerDocument().g
            // System.out.println("inputDataValuefirst: "+inputdata.getTextContent());
            // NodeList testList = xmldoc.getElementsByTagName("InputData");
            for (int i = 0; i < children.getLength(); i++) {
                // Element el = (Element)children.item(i);
                //System.out.println("NodeName: " + children.item(i).getNodeName()
                    //  + " TextValue: " + children.item(i).getTextContent());
                if (children.item(i).getNodeName() == "InputData") {
                    NodeList childs = children.item(i).getChildNodes();
                    for (int j = 0; j < childs.getLength(); j++) {
                        System.out.println("NodeVal;ue: "
                                + childs.item(j).getNodeName() + " Text: "
                                + childs.item(j).getTextContent());
                    }

                }
            }
        }

给我: 节点值;ue:iid 文本:pp1

我也尝试过其他各种组合。它们都给出了子节点的 textContent 而不是节点本身。我怎样才能做到这一点?

使用 LSSerializer.

将您的 <iid> 节点序列化为字符串
try {
    NodeList childNodes = xmldoc.getDocumentElement().getChildNodes();
    for (int i = 0; i < childNodes.getLength(); i++) {
        Node node = childNodes.item(i);
        if ("InputData".equals(node.getNodeName())) {
            Node iid = node.getFirstChild();
            while (!"iid".equals(iid.getNodeName())) {
                iid = iid.getNextSibling();
            }
            String iidTree = ((DOMImplementationLS) xmldoc
                    .getImplementation()).createLSSerializer()
                    .writeToString(iid);
            System.out.println(iidTree.replaceFirst("<.*?>\n", "")
                    .replaceAll("[ ]", ""));
            break;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}

输出:

<iid>
<test3>p</test3>
<test4>p1</test4>
</iid>

LSSerializer 将数据作为 XML 文件写出。 regex 替换仅删除 XML header 并规范化空格。