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

时间:2015-03-01 05:45:41

标签: java xml dom

我想做什么? - 我试图将下面的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());
                    }

                }
            }
        }

给了我: NodeVal; ue:iid Text:pp1

我也尝试了其他各种组合。所有这些都给出了子节点的textContent,但没有给出节点本身。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

使用<iid>将您的LSSerializer节点序列化为字符串。

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标头并规范化空格。