问题描述
- 从xml中根据parent tag获取child tag
- 我用的下面的xml
<Point scount =""1""> <Image name=""app.png"" /></Point>
我需要解析 xml ,就像首先要 ,然后我需要选择 tag。
如何从xml中根据parent tag获取child tag呢?
我用下面的代码从 image tag 中取出值。NodeList image = doc.getElementsByTagName(""Image"");String imagess = ((Element)image.item(imageindex)).getAttribute(""name"");
如何实现?
解决方案
public void parsersXml() {
//实例化一个文档构建器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//通过文档构建器工厂获取一个文档构建器
DocumentBuilder db = dbf.newDocumentBuilder();
//通过文档通过文档构建器构建一个文档实例
Document doc = db.parse(""student.xml"");
//获取所有名字为 “person” 的节点
NodeList nl1 = doc.getElementsByTagName(""Point"");
int size1 = nl1.getLength();
System.out.println(""该名称的节点长度为:"" + size1); for (int i = 0; i < size1; i++) { Node n = nl1.item(i); System.out.println(""***""+n.getNodeName()+""t""+n.getNodeName().length()); NamedNodeMap nm= n.getAttributes(); int len_m=nm.getLength(); for(int k=0;k<len_m;k++){ System.out.println(""属性名:""+nm.item(k).getNodeName()+""t 属性值:""+nm.item(k).getNodeValue()); } if(nl1.item(i).getChildNodes().getLength()>0){ for(int z=0;z<nl1.item(i).getChildNodes().getLength();z++){ System.out.println(nl1.item(i).getChildNodes().item(z).getNodeName()); if(nl1.item(i).getChildNodes().item(z).getAttributes()!=null){ int len_ls=nl1.item(i).getChildNodes().item(z).getAttributes().getLength(); if(len_ls>0){ for(int x=0;x<len_ls;x++){ System.out.println(""属性名:""+nl1.item(i).getChildNodes().item(z).getAttributes().item(x).getNodeName()+""t 属性值:""+nl1.item(i).getChildNodes().item(z).getAttributes().item(x).getNodeValue()); } } } } } //获取 n 节点下所有的子节点。此处值得注意,在DOM解析时会将所有回车都视为 n 节点的子节点。 NodeList nl2 = n.getChildNodes(); //因为上面的原因,在此例中第一个 n 节点有 2 个子节点,而第二个 n 节点则有 5 个子节点(因为多了3个回车)。 int size2 = nl2.getLength(); System.out.println(""N节点的第一个子节点的长度为:"" + size2); for (int j = 0; j < size2; j++) { Node n2 = nl2.item(j); NamedNodeMap nm1= n2.getAttributes(); if(nm1==null){ break; } int len_m1=nm1.getLength(); for(int j1=0;j1<len_m1;j1++){ System.out.println(""""+nm1.item(j1).getNodeName()+""t""+nm1.item(j1).getNodeValue()); } //还是因为上面的原因,故此要处判断当 n2 节点有子节点的时才输出。 if (n2.hasChildNodes()) { System.out.println(n2.getNodeName() + "" = "" + n2.getFirstChild().getNodeValue()); } } } } catch (ParserConfigurationException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } catch (SAXException ex) { ex.printStackTrace(); } }
时间: 2024-10-28 18:31:15