我想做什么? - 我试图将下面的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,但没有给出节点本身。我怎样才能做到这一点?
答案 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标头并规范化空格。