XML解析获取元素null值
问题描述:
我已创建一个Web服务看起来像:XML解析获取元素null值
<?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。 web服务有什么问题吗?请建议。
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;
}
}
}
答
你的情况
siteCode
没有属性的Node of todoList
解决方案
NodeList nlList = eElement.getElementsByTagName("siteCode").item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
category[i].setText(nValue.getNodeValue());
答
更改您的循环这个
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");
}
答
迭代的节点列表,并获得价值的每个孩子。
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
感谢您的快速响应。 –