解析 android 中的 xml 文件,获取给定节点的所有属性
Parse xml file in android ,fetch all attibutes of given node
我正在尝试从下面发布的 xml
文件中获取 id
、name
和 pin
,并且我编写了下面发布的代码。
问题是,这一行 node.getNodeValue()
return 始终为 null
请告诉我如何从 xml
文件中正确获取 id
、name
和 pin
?
代码
try {
URL url = new URL(link);
URLConnection conn = url.openConnection();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(conn.getInputStream());
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("employee");
Log.i(TAG, " nodeLength:" + nodes.getLength());
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
Log.i(TAG, "Current Element :" + node.getNodeValue());//THIS LINE
}
}
catch (Exception e) {
e.printStackTrace();
}
xml
<employee_list>
<employee id="21358" pin="0000" name="www"/>
<employee id="21359" pin="0011" name="qqq"/>
<employee id="20752" pin="1011" name="Test"/>
<employee id="814" pin="1012" name="Pf"/>
<employee id="21372" pin="1013" name="Kru"/>
</employee_list>
堆栈跟踪
01-24 15:05:54.219 5624-5718/com.example. I/XmlParser: nodeLength:33
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example.I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
您可以获取所有 Attributes
的 NamedNodeMap
并使用 getNamedItem
和 Id,pin,name
作为此函数的键,最后使用 getNodeValue
获取值函数
NodeList nodes = doc.getElementsByTagName("employee");
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
NamedNodeMap attr = node.getAttributes();
// find item using key name and then fetch the node value
String id = attr.getNamedItem("id").getNodeValue();
String pin = attr.getNamedItem("pin").getNodeValue();
String name = attr.getNamedItem("name").getNodeValue();
System.out.println(id+" "+pin+" "+name);
}
输出:
21358 0000 www
21359 0011 qqq
20752 1011 Test
814 1012 Pf
21372 1013 Kru
或者您也可以使用循环而不是获取单个值
NodeList nodes = doc.getElementsByTagName("employee");
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
NamedNodeMap attr = node.getAttributes();
for(int j = 0 ; j<attr.getLength() ; j++) {
Attr attribute = (Attr)attr.item(j);
System.out.println("Current Element :" + attribute.getName()+" = "+attribute.getValue());
}
}
我正在尝试从下面发布的 xml
文件中获取 id
、name
和 pin
,并且我编写了下面发布的代码。
问题是,这一行 node.getNodeValue()
return 始终为 null
请告诉我如何从 xml
文件中正确获取 id
、name
和 pin
?
代码
try {
URL url = new URL(link);
URLConnection conn = url.openConnection();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(conn.getInputStream());
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("employee");
Log.i(TAG, " nodeLength:" + nodes.getLength());
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
Log.i(TAG, "Current Element :" + node.getNodeValue());//THIS LINE
}
}
catch (Exception e) {
e.printStackTrace();
}
xml
<employee_list>
<employee id="21358" pin="0000" name="www"/>
<employee id="21359" pin="0011" name="qqq"/>
<employee id="20752" pin="1011" name="Test"/>
<employee id="814" pin="1012" name="Pf"/>
<employee id="21372" pin="1013" name="Kru"/>
</employee_list>
堆栈跟踪
01-24 15:05:54.219 5624-5718/com.example. I/XmlParser: nodeLength:33
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example.I/XmlParser: Current Element :null
01-24 15:05:54.220 5624-5718/com.example. I/XmlParser: Current Element :null
您可以获取所有 Attributes
的 NamedNodeMap
并使用 getNamedItem
和 Id,pin,name
作为此函数的键,最后使用 getNodeValue
获取值函数
NodeList nodes = doc.getElementsByTagName("employee");
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
NamedNodeMap attr = node.getAttributes();
// find item using key name and then fetch the node value
String id = attr.getNamedItem("id").getNodeValue();
String pin = attr.getNamedItem("pin").getNodeValue();
String name = attr.getNamedItem("name").getNodeValue();
System.out.println(id+" "+pin+" "+name);
}
输出:
21358 0000 www
21359 0011 qqq
20752 1011 Test
814 1012 Pf
21372 1013 Kru
或者您也可以使用循环而不是获取单个值
NodeList nodes = doc.getElementsByTagName("employee");
for (int i = 0; i < nodes.getLength(); i ++) {
Node node = nodes.item(i);
NamedNodeMap attr = node.getAttributes();
for(int j = 0 ; j<attr.getLength() ; j++) {
Attr attribute = (Attr)attr.item(j);
System.out.println("Current Element :" + attribute.getName()+" = "+attribute.getValue());
}
}