现在的位置: 首页 > 综合 > 正文

xml解析多重节点

2012年02月14日 ⁄ 综合 ⁄ 共 4168字 ⁄ 字号 评论关闭

xml为:
<friendShares>
<totalCount>352</totalCount>
<friendShare>
<code>XXXXXXX</code>
<date>2010-01-15T00:00:00+08:00</date>
<friendId>499</friendId>
<movie>
<code>XXXXXX</code>
<contentId>89718</contentId>
<movieName>机动部队警例</movieName>
<picPath>/20090817/189736.gif</picPath>
</movie>
<nickName>xjmy</nickName>
<recommendId>32769</recommendId>
<uid>499</uid>
</friendShare>
<friendShare>
<code>XXXXXXX</code>
<date>2010-01-15T00:00:00+08:00</date>
<friendId>499</friendId>
<movie>
<code>XXXXXX</code>
<contentId>89718</contentId>
<movieName>机动部队警例</movieName>
<picPath>/20090817/189736.gif</picPath>
</movie>
<nickName>xjmy</nickName>
<recommendId>32769</recommendId>
<uid>499</uid>
</friendShare>
</friendShares>

java代码:

Document doc;
try {
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
.parse(new InputSource(new StringReader(xml)));

NodeList nl = doc.getElementsByTagName("totalCount");
if(doc.getElementsByTagName("totalCount").item(0)!=null){
if(doc.getElementsByTagName("totalCount").item(0).getFirstChild()!=null){
int totalCount=Integer.parseInt(doc.getElementsByTagName("totalCount").item(0).getFirstChild().getNodeValue());
nl = doc.getElementsByTagName("friendShare");
for (int i=0;i<nl.getLength();i++){
IptvMembers members=new IptvMembers();
members.setCount(totalCount);
if(doc.getElementsByTagName("date").item(i)!=null){
if(doc.getElementsByTagName("date").item(i).getFirstChild()!=null){
String date=doc.getElementsByTagName("date").item(i).getFirstChild().getNodeValue();
date=date.replaceAll("T", " ");
int index=date.indexOf("+");
date=date.substring(0, index);
members.setCreateDate(date);
}
}
if(doc.getElementsByTagName("nickName").item(i)!=null){
if(doc.getElementsByTagName("nickName").item(i).getFirstChild()!=null){
members.setNickname(doc.getElementsByTagName("nickName").item(i).getFirstChild().getNodeValue());
}
}
if(doc.getElementsByTagName("contentId").item(i)!=null){
if(doc.getElementsByTagName("contentId").item(i).getFirstChild()!=null){
members.setContentId(doc.getElementsByTagName("contentId").item(i).getFirstChild().getNodeValue());
}
}
if(doc.getElementsByTagName("movieName").item(i)!=null){
if(doc.getElementsByTagName("movieName").item(i).getFirstChild()!=null){
members.setMovieName(doc.getElementsByTagName("movieName").item(i).getFirstChild().getNodeValue());
}
}

//这里主要想说明的是这中间friendShare下面还有一个movie的节点中也有一个
code的子节点。由于friendShare里面有2个code子节点所以当用取movieName那样的格式去取code就会造成错误会多出来一倍的
code值。一开始想的再给movie也像friendShare那样循环一次,但是多次实验下来后还是无法正确得到code的数据。改为如下红色字体即
可正确顺序获得code的值。

                        if(doc.getElementsByTagName("movie").item(i)!=null){
if(doc.getElementsByTagName("movie").item(i).getChildNodes().item(0)!=null){
members.setMediCode(doc.getElementsByTagName("movie").item(i).getChildNodes().item(0).getFirstChild().getNodeValue());
String ur="cmd=play&user="+member+"&program=<mediacode>";
members.setCode(""+new
Base64().getBase64(ur+doc.getElementsByTagName("movie").item(i).getChildNodes().item(0).getFirstChild().getNodeValue()+"</mediacode>"));
}
}


if(doc.getElementsByTagName("friendId").item(i)!=null){
if(doc.getElementsByTagName("friendId").item(i).getFirstChild()!=null){
members.setFriendName(doc.getElementsByTagName("friendId").item(i).getFirstChild().getNodeValue());
}
}

if(doc.getElementsByTagName("picPath").item(i)!=null){
if(doc.getElementsByTagName("picPath").item(i).getFirstChild()!=null){
members.setPicpath(doc.getElementsByTagName("picPath").item(i).getFirstChild().getNodeValue());
members.setPath(Config.get("url.fileserver")+members.getPicpath());
}
}   
if(doc.getElementsByTagName("uid").item(i)!=null){
if(doc.getElementsByTagName("uid").item(i).getFirstChild()!=null){
members.setUid(Integer.parseInt(doc.getElementsByTagName("uid").item(i).getFirstChild().getNodeValue()));
}
}
if(listMembers!=null && listMembers.size()>0){
boolean flg=false;
for(int n=0;n<listMembers.size();n++){
flg=false;
if(listMembers.get(n).getContentId().equals(members.getContentId()))
{
flg=true;
listMembers.get(n).setFriendName(listMembers.get(n).getFriendName()+","+members.getFriendName());
}
}
if(flg==false){
listMembers.add(members);
}
}else
{
listMembers.add(members);
}
}
}
}
}catch(SAXException e)
{
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}

抱歉!评论已关闭.