我创建了一个webservice,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
- <todoLists>
- <todoList>
<productId>smthig</productId>
<siteCode>smthing</siteCode>
<subDeptId>smthing</subDeptId>
</todoList>
</todoLists>
我试图使用DOM解析器使用下面的代码解析它,我得到nodeList.getLength()= 20但没有得到元素的值。它显示为null我也尝试过SAX解析器但是也给予null。网络服务有什么问题吗?请建议。
public class XMLParsingDOMExample extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** Create a new layout to display the view */
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(1);
/** Create a new textview array to display the results */
TextView category[];
try {
URL url = new URL(
"http://xxxxxx:8080/webservicedemo/rest/todo");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("todoList");
System.out.println("null 1");
/** Assign textview array lenght by arraylist size */
category = new TextView[nodeList.getLength()];
System.out.println("null 122 nodeList.getLength()" +nodeList.getLength());
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
category[i] = new TextView(this);
Element fstElmnt = (Element) node;
category[i].setText("Name = "
+ fstElmnt.getAttribute("siteCode"));
layout.addView(category[i]);
System.out.println("null 551");
}
} catch (Exception e) {
System.out.println("XML Pasing Excpetion = " + e);
}
/** Set the layout view to display */
setContentView(layout);
}
public class RSSAdapter extends BaseAdapter {
Element rootElement;
public RSSAdapter(Element rootElement) {
this.rootElement = rootElement;
}
public int getCount() {
// get the count of children of the root element
return 0;
}
public Object getItem(int position) {
// get the child identified by the position,
// this is the important part where you
// want to get the right child representing the RSS data that you want to get
return null;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// implement your view here....
return null;
}
}
}
答案 0 :(得分:2)
在您的情况下siteCode
不是属性Node of todoList
<强>解决方案强>
NodeList nlList = eElement.getElementsByTagName("siteCode").item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
category[i].setText(nValue.getNodeValue());
答案 1 :(得分:1)
将您的for循环更改为此
for (int i = 0; i < nodeList.getLength(); i++) {
NodeList nodes = nodeList.item(i).getChildNodes();
category[i] = new TextView(this);
Element fstElmnt = (Element) node;
// this will return node value of 2nd node
category[i].setText("Name = "
+ fstElmnt.item(1).getNodeValue());
layout.addView(category[i]);
System.out.println("null 551");
}
答案 2 :(得分:1)
迭代nodelist并获取每个子节点的值。
NodeList nodeList = doc.getElementsByTagName("todoList");
int length=nodeList.getLength();
category = new TextView[length];
for(int index=0;index<length;index++){
Element element=(Element) nodeList.item(1ndex);
NodeList childList=element.getElementsByTagName("siteCode");
Element e=(Element) childList.item(0);
Node n=e.getFirstChild();
CharacterData data=(CharacterData)n;
category[index].setText(data.getData());
}//end for loop