java解析xml问题:如何获得一级标签下全部内容?
16lz
2021-01-22
做一个远程备份和还原的项目,需要把一个xml文件的内容由web端发送给android手机端,然后手机端接受并解析。
由于还原功能是要读取备份数据,所以考虑将从手机端采集的数据备份到远程ftp,存在一个xml文件下。
然后还原过程是从ftp取出c.xml内容,存为String,然后插入到另一个a.xml文件中的一个子节点<data>下(下面红字标出),
a.xml内容如下:
<SyncMLs>
<SyncMLxmlns='SYNCML:SYNCML1.2'>
<SyncHdr>
<VerDTD>1.2</VerDTD>
<VerProto>SyncML/1.2</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
<Target>
<LocURI>IMEI:[000000000000000,000000000000000]</LocURI>
</Target>
<Source>
<LocURI>http://59.64.139.160:8080/NOMWEB/index.jsp</LocURI>
</Source>
</SyncHdr>
<cmd>RemoteRestore/2012-07-1811:42:47</cmd>
<scmd>Get</scmd>
<scps>1</scps>
<imei>000000000000000</imei>
<sourceAddr>NMOTCGui</sourceAddr>
<data> <Contacts>
<Contact>
<ciId>1</ciId>
<ciName>skiffSun</ciName>
<ciPhoneNums>1-234-567-89;</ciPhoneNums>
<ciEmail>xiaoke2@126.com;</ciEmail>
<ciAddr>1-NetworkManager-86-China-China-Beijing-Bupt</ciAddr>
</Contact>
<Contact>
<ciId>2</ciId>
<ciName>TaoTao</ciName>
<ciPhoneNums>987-654-32100;1-234-567-8900;</ciPhoneNums>
<ciEmail>taoge@gmail.com;</ciEmail>
<ciAddr>1-null-100876-null-Beijing-Beijing-Wudaokou</ciAddr>
</Contact>
<Contact>
<ciId>3</ciId>
<ciName>XiaoKe</ciName>
<ciPhoneNums>564-789-56244;1-580-000-0000;</ciPhoneNums>
<ciEmail>xiao2@126.com;</ciEmail>
<ciAddr>1-null-100876-null-BeiJing-BeiJing-GongZhuFen</ciAddr>
</Contact>
</Contacts>
</data>
</SyncML>
</SyncMLs>
其中红字部分为c.xml(也就是还原要取出的xml文件内容)
但是在解析xml文件取出数据时取出内容为null,代码如下
上述代码片段
cmd.setData(doc.getElementsByTagName("data").item(i)
.getFirstChild().getNodeValue());
的本意是想取出<data></data>之间的全部内容(红字部分),但是取出来却为null,想问下怎样做能够实现将data></data>间的内容(即从<Contacts>...</Contacts>整个内容,包括标签)一同取出?
估计大家看到罗里啰嗦的也烦了,我简单点问吧
<data>
<contact>
123
</contact>
</data>
想把上面红字部分全部取出来而不是只取123,求代码
由于还原功能是要读取备份数据,所以考虑将从手机端采集的数据备份到远程ftp,存在一个xml文件下。
然后还原过程是从ftp取出c.xml内容,存为String,然后插入到另一个a.xml文件中的一个子节点<data>下(下面红字标出),
a.xml内容如下:
<SyncMLs>
<SyncMLxmlns='SYNCML:SYNCML1.2'>
<SyncHdr>
<VerDTD>1.2</VerDTD>
<VerProto>SyncML/1.2</VerProto>
<SessionID>1</SessionID>
<MsgID>1</MsgID>
<Target>
<LocURI>IMEI:[000000000000000,000000000000000]</LocURI>
</Target>
<Source>
<LocURI>http://59.64.139.160:8080/NOMWEB/index.jsp</LocURI>
</Source>
</SyncHdr>
<cmd>RemoteRestore/2012-07-1811:42:47</cmd>
<scmd>Get</scmd>
<scps>1</scps>
<imei>000000000000000</imei>
<sourceAddr>NMOTCGui</sourceAddr>
<data> <Contacts>
<Contact>
<ciId>1</ciId>
<ciName>skiffSun</ciName>
<ciPhoneNums>1-234-567-89;</ciPhoneNums>
<ciEmail>xiaoke2@126.com;</ciEmail>
<ciAddr>1-NetworkManager-86-China-China-Beijing-Bupt</ciAddr>
</Contact>
<Contact>
<ciId>2</ciId>
<ciName>TaoTao</ciName>
<ciPhoneNums>987-654-32100;1-234-567-8900;</ciPhoneNums>
<ciEmail>taoge@gmail.com;</ciEmail>
<ciAddr>1-null-100876-null-Beijing-Beijing-Wudaokou</ciAddr>
</Contact>
<Contact>
<ciId>3</ciId>
<ciName>XiaoKe</ciName>
<ciPhoneNums>564-789-56244;1-580-000-0000;</ciPhoneNums>
<ciEmail>xiao2@126.com;</ciEmail>
<ciAddr>1-null-100876-null-BeiJing-BeiJing-GongZhuFen</ciAddr>
</Contact>
</Contacts>
</data>
</SyncML>
</SyncMLs>
其中红字部分为c.xml(也就是还原要取出的xml文件内容)
但是在解析xml文件取出数据时取出内容为null,代码如下
DocumentBuilderdocBuilder=docFactory.newDocumentBuilder();
Documentdoc=docBuilder.parse(openFileInput("cmd.xml"));
ElementrootElement=doc.getDocumentElement();
NodeListnoteNodeList=rootElement.getElementsByTagName("SyncML");
for(inti=0;i<noteNodeList.getLength();i++){
Stringimei=doc.getElementsByTagName("imei").item(i)
.getFirstChild().getNodeValue();
System.out.println(tm.getDeviceId());
if(imei.equals(tm.getDeviceId())){
cmd.setImei(imei);
cmd.setSourceAddr(doc.getElementsByTagName("sourceAddr")
.item(i).getFirstChild().getNodeValue());
//还原数据功能使用,data用于存储从ftp取出的xml文件
cmd.setData(doc.getElementsByTagName("data").item(i)
.getFirstChild().getNodeValue());
System.out.println(doc.getElementsByTagName("name"));
System.out.println(doc.getElementsByTagName("name").item(0));
System.out.println(doc.getElementsByTagName("name").item(0).getFirstChild());
cmd.setCmd(doc.getElementsByTagName("cmd").item(i)
.getFirstChild().getNodeValue());
cmd.setScps(doc.getElementsByTagName("scps")
.item(i).getFirstChild().getNodeValue());
Log.i("cmd",cmd.getCmd());
//cmd.setCmdId(doc.getElementsByTagName("cmdId").item(i)
//.getFirstChild().getNodeValue());
Log.i("cmdData:",cmd.getData());
//Toast.makeText(getBaseContext(),
//"dm命令:"+cmd.getCmd()+"\n"+"命令参数:"+cmd.getData(),
//Toast.LENGTH_SHORT).show();
上述代码片段
cmd.setData(doc.getElementsByTagName("data").item(i)
.getFirstChild().getNodeValue());
的本意是想取出<data></data>之间的全部内容(红字部分),但是取出来却为null,想问下怎样做能够实现将data></data>间的内容(即从<Contacts>...</Contacts>整个内容,包括标签)一同取出?
7 个解决方案
#1
估计大家看到罗里啰嗦的也烦了,我简单点问吧
<data>
<contact>
123
</contact>
</data>
想把上面红字部分全部取出来而不是只取123,求代码