之前写过一个读取xml文件的文章,是通过w3c.dom.Document,为此还特意比较了 *.properties和*.xml的区别。也是因为当时的抽象,给现在省去了好多麻烦,因为小编一直在持续不断地调用别人的接口,也偶尔给别人提供几个接口,日子过得倒也丰富……最近一个接口是用xml传输的,但不是写到一个xml文件中,而是拼接xml字符串,然后再通过SAX解析器使用InputSource对象读取XML……具体见代码:
//xml文件读取 public class xmlReaderTest { public List xmlElements(String xmlDoc) { //创建一个新的字符串 StringReader read = new StringReader(xmlDoc); //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); //创建一个新的SAXBuilder SAXBuilder sb = new SAXBuilder(); try { //通过输入源构造一个Document Document doc = sb.build(source); //取的根元素 Element root = doc.getRootElement(); System.out.println(root.getName());//输出根元素的名称(测试) //得到根元素所有子元素的集合 List jiedian = root.getChildren(); //获得XML中的命名空间(XML中未定义可不写) Namespace ns = root.getNamespace(); Element et = null; for(int i=0;i<jiedian.size();i++){ et = (Element) jiedian.get(i);//循环依次得到子元素 System.out.println(et.getChild("users_id",ns).getText()); System.out.println(et.getChild("users_address",ns).getText()); } et = (Element) jiedian.get(0); List zjiedian = et.getChildren(); for(int j=0;j<zjiedian.size();j++){ Element xet = (Element) zjiedian.get(j); System.out.println(xet.getName()); } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public static void main(String[] args){ xmlReaderTest doc = new xmlReaderTest(); //拼接一个xml字符串 StringBuilder sbody = new StringBuilder(); sbody.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); sbody.append("<BODY>"); sbody.append("<ECCODE>"); sbody.append("2aettgdg"); sbody.append("</ECCODE>"); sbody.append("<PHONE>"); sbody.append("187XXXXXXXX"); sbody.append("</PHONE>"); sbody.append("<VOLUME>"); sbody.append("10M"); sbody.append("</VOLUME>"); sbody.append("</BODY>"); String body = sbody.toString(); doc.xmlElements(body); System.out.println(doc.xmlElements(body)); } }
也是因为XML让我知道原来双方互调接口,会有这么多事儿,这么多的规则,而且自己想要定义什么样的协议就定义什么样的协议,不管什么样的协议,都是为了更好的更安全的来达到双赢的效果……
原文链接:https://www.f2er.com/xml/295512.html