Java/DOM:获取节点的XML内容
我正在使用W3CDOM解析Java中的XML文件。 我陷入了一个特定的问题,我不知道如何获取节点的整个内部XML 节点如下所示:Java/DOM:获取节点的XML内容,java,xml,dom,Java,Xml,Dom,我正在使用W3CDOM解析Java中的XML文件。 我陷入了一个特定的问题,我不知道如何获取节点的整个内部XML 节点如下所示: <td><b>this</b> is a <b>test</b></td> 这是一个测试 我必须使用什么函数才能获得: "<b>this</b> is a <b>test</b>" “这是一个测试”您必须使用转换/xslt API,将您的节点用作要转
<td><b>this</b> is a <b>test</b></td>
这是一个测试
我必须使用什么函数才能获得:
"<b>this</b> is a <b>test</b>"
“这是一个测试”
您必须使用转换/xslt API,将您的节点用作要转换的节点,并将结果放入新的StreamResult(new StringWriter());
. 见呃。。。您也可以调用toString()并手动或使用regexp删除开始和结束标记 edit:toString()没有达到我预期的效果。拉出O'Reilly讨论了JavaDOM的加载和保存模块 特别是看那些看起来很有希望的。您可以调用writeToString(node)并切掉开头和结尾标记,就像我建议的那样,或者尝试使用不打印顶部节点标记(不确定这是否可行;我承认我以前从未使用过LSSerializer) 阅读O'Reilly的书似乎意味着做了如下事情:
DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance();
DOMImplementationLS lsImpl =
(DOMImplementationLS)registry.getDOMImplementation("LS");
LSSerializer serializer = lsImpl.createLSSerializer();
String nodeString = serializer.writeToString(node);
node.getTextContent()
如果没有其他原因,您应该使用Dom4J的JDom来处理节点,以正确处理空白。要删除不必要的标记,可能可以使用以下代码: DOMConfiguration=serializer.getDomConfig(); config.setParameter(“标准形式”,true)
但它并不总是有效的,因为“canonical form=true”是可选的我知道很久以前就有人问过这个问题,但对于下一个搜索者(今天是我),这对JDOM有效:
JDOMXPath xpath = new JDOMXPath("/td");
String innerXml = (new XMLOutputter()).outputString(xpath.selectNodes(document));
这将所有子节点的列表传递到outputString中,outputString将按顺序将它们序列化。对此您有何看法? 我今天在android上也遇到了同样的问题,但我成功地制作了一个简单的“序列化程序”
私有字符串innerXml(节点){
字符串s=“”;
NodeList childs=node.getChildNodes();
对于我的td节点的(int i=0;iNo?.toString(),只会导致“[b:null]”嗯,我想我与Javascript+e4x混淆了。我的意思是调用只生成输出的函数,然后删除开始/结束标记。[关于SO的这篇文章可能有助于获取节点的内部Xml][1][1]:我说“非常感谢”!你帮我节省了做同样事情的时间。考虑到性能,这可能是最有效的方法。
private String innerXml(Node node){
String s = "";
NodeList childs = node.getChildNodes();
for( int i = 0;i<childs.getLength();i++ ){
s+= serializeNode(childs.item(i));
}
return s;
}
private String serializeNode(Node node){
String s = "";
if( node.getNodeName().equals("#text") ) return node.getTextContent();
s+= "<" + node.getNodeName()+" ";
NamedNodeMap attributes = node.getAttributes();
if( attributes!= null ){
for( int i = 0;i<attributes.getLength();i++ ){
s+=attributes.item(i).getNodeName()+"=\""+attributes.item(i).getNodeValue()+"\"";
}
}
NodeList childs = node.getChildNodes();
if( childs == null || childs.getLength() == 0 ){
s+= "/>";
return s;
}
s+=">";
for( int i = 0;i<childs.getLength();i++ )
s+=serializeNode(childs.item(i));
s+= "</"+node.getNodeName()+">";
return s;
}