之前写过一个读取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让我知道原来双方互调接口,会有这么多事儿,这么多的规则,而且自己想要定义什么样的协议就定义什么样的协议,不管什么样的协议,都是为了更好的更安全的来达到双赢的效果……