在PHP中,我习惯转换xml为数组,在android里面,我也喜欢这样,可以分配到map类型。
先看看示例数据:
我们可以用一个Map类型的变量保存最后的结果:
简单的分析一下:
取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()
这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型
根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可
最终得到类似php数组类型,可以自己遍历来用:
另外一种结构是这样的:
相应的可以这样处理:
这也达到同样的效果,这xml其实很容易让人糊涂的。。我也支撑不住啦!!
也可以参考一下这个复杂的xml解析:
http://hellsing42.javaeye.com/blog/115248
原创内容如转载请注明:来自 阿权的书房
先看看示例数据:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<site id="65" url="http://www.aslibra.com" >阿权的书房</site>
<site id="5" url="http://www.google.com" >谷歌</site>
</list>
<list>
<site id="65" url="http://www.aslibra.com" >阿权的书房</site>
<site id="5" url="http://www.google.com" >谷歌</site>
</list>
我们可以用一个Map类型的变量保存最后的结果:
Map<Integer,Map<String,String>> sites = new HashMap<Integer,Map<String,String>>();
try{
String myurl = "http://www.aslibra.com/teach/android/sites.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
for(int j=0;j<mysite.getAttributes().getLength();j++){
sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
mysite.getAttributes().item(j).getNodeValue() );
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );
try{
String myurl = "http://www.aslibra.com/teach/android/sites.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
for(int j=0;j<mysite.getAttributes().getLength();j++){
sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
mysite.getAttributes().item(j).getNodeValue() );
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );
简单的分析一下:
取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()
这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型
<A B="C">D</A>
根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可
最终得到类似php数组类型,可以自己遍历来用:
Map<Integer,Map<String,String>> sites = XXXX(前面的处理返回值);
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
row = sites.get(i);
//比如row.get("url")
}
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
row = sites.get(i);
//比如row.get("url")
}
另外一种结构是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<site>
<url>http://www.aslibra.com</url>
<siteName>阿权的书房</siteName>
</site>
<site>
<url>http://www.google.com</url>
<siteName>谷歌</siteName>
</site>
</list>
<list>
<site>
<url>http://www.aslibra.com</url>
<siteName>阿权的书房</siteName>
</site>
<site>
<url>http://www.google.com</url>
<siteName>谷歌</siteName>
</site>
</list>
相应的可以这样处理:
Map<Integer,Map<String,String>> sites = new HashMap<Integer,Map<String,String>>();
try{
String myurl = "http://www.aslibra.com/teach/android/sites2.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
for(Node node=mysite.getFirstChild();node!=null;node=node.getNextSibling()){
if(node.getNodeType()==Node.ELEMENT_NODE){
//Log.d(tag, "myattrib:"+ node.getFirstChild().getNodeValue() );
sitesChild.put( node.getNodeName(),
node.getFirstChild().getNodeValue() );
}
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size()+" / "+ sites.get(0).get("url") );
try{
String myurl = "http://www.aslibra.com/teach/android/sites2.xml";
URL url = new URL(myurl);
HttpURLConnection conn;
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
NodeList nl = doc.getElementsByTagName("site");
int sites_number = nl.getLength();
for (int i=0; i<sites_number; i++){
Node mysite = doc.getElementsByTagName("site").item(i);
Map<String,String> sitesChild = new HashMap<String,String>();
for(Node node=mysite.getFirstChild();node!=null;node=node.getNextSibling()){
if(node.getNodeType()==Node.ELEMENT_NODE){
//Log.d(tag, "myattrib:"+ node.getFirstChild().getNodeValue() );
sitesChild.put( node.getNodeName(),
node.getFirstChild().getNodeValue() );
}
}
sites.put(i, sitesChild);
}
}catch(Exception e){
//Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size()+" / "+ sites.get(0).get("url") );
这也达到同样的效果,这xml其实很容易让人糊涂的。。我也支撑不住啦!!
也可以参考一下这个复杂的xml解析:
http://hellsing42.javaeye.com/blog/115248
原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
转:女流氓语录
转:Centos+iptables+l7-filter 封QQ MSN和P2P
