java 去除xml字符串里有null的节点 求大神

例如<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><A><id>null</id><name>李三</name>... 例如
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><A><id>null</id><name>李三</name></A> 去除<id>null</id>
展开
 我来答
月光雪松
2014-08-26 · TA获得超过476个赞
知道小有建树答主
回答量:338
采纳率:100%
帮助的人:233万
展开全部

这个简单,循环一下节点,如果为空就删除

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class MyTest {
 public static void main(String[] args) {
  try {
   removeNullValueNode();
  } catch (Exception e) {
   // TODO 自动生成された catch ブロック
   e.printStackTrace();
  }
 }
 public static void removeNullValueNode() throws Exception {
  // 解析xml文件
  String xmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><A><id>null</id><name>李三</name></A>";
  System.out.println("原始内容:\r\n" + xmlContent);
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder db = factory.newDocumentBuilder();
  // 根据xml内容构建document:当然这可以直接加载文件流
  Document doc = db.parse(new ByteArrayInputStream(xmlContent.getBytes()));
  // A节点
  Element elmtInfo = doc.getDocumentElement();
  // A节点下的子节点
  NodeList nodes = elmtInfo.getChildNodes();
  for (int i = 0; i < nodes.getLength(); i++) {
   Node result = nodes.item(i);
   if (result.getNodeType() != Node.ELEMENT_NODE) {
    // 如果不是元素节点跳过
    continue;
   }
   if (null == result.getTextContent()
     || "null".equals(result.getTextContent())) {
    // 删除本节点
    elmtInfo.removeChild(result);
   }
  }
  // XML转字符串
  TransformerFactory tf = TransformerFactory.newInstance();
  Transformer t = tf.newTransformer();
  t.setOutputProperty("encoding", "utf-8");
  ByteArrayOutputStream bos = new ByteArrayOutputStream();
  t.transform(new DOMSource(doc), new StreamResult(bos));
  String xmlStr = bos.toString("utf-8");
  // 输出删除节点后的xml类容
  System.out.println("删除空节点后的内容:\r\n" + xmlStr);
 }
}
追问
谢谢了
charlycong
2014-08-26 · TA获得超过445个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:292万
展开全部
public class RemoveNullElement {


public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><A><id>null</id><name>李三</name><id><id>null</id><name>李三</name><id>null</id></id></A>";
try {
Document doc = DocumentHelper.parseText(xml);
new RemoveNullElement().removeNullElement(doc.getRootElement(), doc.getRootElement());
System.out.println(doc.asXML());
} catch (DocumentException e) {
System.out.println("parse xml failed!"+e);
e.printStackTrace();
}
}

private void removeNullElement(Element ele,Element parent){
if(ele == null){
return;
}
if(ele.getText()!=null && ele.getText().equalsIgnoreCase("null")){
parent.remove(ele);
}else{
List<Element> children = ele.elements();
if(children!=null && children.size()>0){
for (Element child : children) {
removeNullElement(child,ele);
}
}
}
}
}

写了个删除null节点的方法,递归调用。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-08-26
展开全部
你获取的时候直接使用getElementById方法就行了。不会放回text标签的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式