Document/XML常见用法和易混点

来源:互联网 发布:如何取淘宝店名 编辑:程序博客网 时间:2024/04/29 22:46

把出参报文转成document然后拿到对应节点的值是我们这些web应用开发常见的,常用的处理手法,所以很有必要总结一下,对易混点Node和Element区别和联系进行说明。

网上看到有关这块太多了,讲的模糊不清的是常态,不过发现一片好贴,分享给大家,讲清楚了node和element的区别:XmlNode与XmlElement的区别总结



我们这里先写个xml例子,然后据这个例子说明:

<?xml version="1.0" encoding="UTF-8" ?><MQ>    <SALECOM>1TT</SALECOM><!--销售机构-->    <row col1="1" col2="000000123"/></MQ>

xml报文构成常见的可以分为这么五种,重点就是元素节点,文本节点,属性节点:

1. 文档节点:整个文档就是一个文档节点 ---上面整个mq报文就是一个文档节点。*2. 元素节点:每个XML标签就是一个元素节点---比如mq报文中的<SALECOM></SALECOM>标签和<row/>标签都是元素节点。*3. 文本节点: 而元素节点中一般都有文本节点来指定这个元素节点的值是多少,这里的<SALEMANAGECOM></SALEMANAGECOM>中的值1TT就是文本节点*4.属性节点: 属性节点就是元素节点的属性,<row/>节点中有两个属性节点:col1属性及属性的值‘1’和col2属性及其属性值‘000000123’。5.注释节点: 就是解释元素节点含义的注释部分。比如:<!--销售机构-->就是注释节点。

上面这五种节点都叫Node节点,但是只有元素节点叫Element.所以他们的包含关系是Node包含了Element.且要知道元素节点Element是整个xml的最小单位,其下是不可能有别的节点存在,只有Node才有子节点。关系也可以从下面的这两个方法看出来:
NodeList list=node.getChildNodes();
而Element element=(Element)node.getChildNodes().item(0);

一些常用方法:

//先获得具体节点Node node=document.getElementsByTagName(nodeName).item(0);//将节点向下转型为元素节点,然后进行对元素节点的操作。元素节点可以获取元素中的每个属性值,也可以获取元素节点本身的值Element element=(Element)node;//获取节点本身的值,但大多时候我们获取节点值时不用转到元素节点,直接获取String nodeValue=node.getTextContent();导致很多同学迷惑就在这了。其实真正面目还是下面这个方法。String nodeValue=element.getTextContent();----------------------------------------------------------//获取节点属性的值,要指定是那个属性String attrValue=elment.getAttribute(attrName);//如果我们想为Document添加一个节点--暗指 元素节点,我们要知道在那个节点下面添加子节点。节点名称是啥,节点有值的话,值是多少?--------------------------------------------------------//创建一个元素节点,并为节点赋值Element element=document.createElement(newElementName);element.setTextContent(newElementValue);//将节点添加到父节点下fatherElement.appendChild(element);

工具类の报文Document类型—>String类型Xml

public final static String DocumentToString(Document document){    if(document = null){        return "";    }    ByteArrayOutputStream bos=null;    TransformerFactory tf=TransformerFactory.newInstance();    try{        Transformer t=tf.newTransformer();        t.setOutputProperty(OutputKeys.ENCODING,"UTF-8");        t.setOutputProperty(OutputKeys.INDENT,"yes");        bos=new ByteArrayOutputStream();        //把要转换的文件document,和要转成为的方式bos都放到转换器中        t.transform(new DOMSource(document),new StreamResult(bos));        return bos.toString();    }catch(Exception e){        logger.error("Doc 转换异常。。。");    }    return "" ;}

工具类のString类型Xml—>报文Document类型

public final static Document StringToDocument(String xml){    Document doc=null;    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();    DocumentBuilder builder=null;    try{        builder=factory.newDocumentBuilder();    }catch(ParserConfigurationException e){        throw new  RuntimeException(e);    }    try{        doc=builder.parse(new InputStream(xml));    }catch(Exception e){        throw new RuntimeException(e);    }    return doc;}
原创粉丝点击