Java DOM xml无法得到孩子
发布时间:2020-12-14 23:22:12 所属栏目:Java 来源:网络整理
导读:我的 XML看起来像这样: ConnProf ConnProfID="1111" ConnNum1/ConnNum IsMSPAfalse/IsMSPA IsArrayfalse/IsArray IsDDORfalse/IsDDOR Subsystem SSID="2222"ConnProfID="3333" SSNameAA/SSName GenericSSNameAA/GenericSSName ConnFuncAddraaa/ConnFuncAddr
我的
XML看起来像这样:
<ConnProf ConnProfID="1111"> <ConnNum>1</ConnNum> <IsMSPA>false</IsMSPA> <IsArray>false</IsArray> <IsDDOR>false</IsDDOR> <Subsystem SSID="2222"ConnProfID="3333"> <SSName>AA</SSName> <GenericSSName>AA</GenericSSName> <ConnFuncAddr>aaa</ConnFuncAddr> <DSSNum>22</DSSNum> <isRemoved>false</isRemoved> </Subsystem> <Subsystem SSID="4444" ConnProfID="5555"> <SSName>BBBB</SSName> <GenericSSName>BB</GenericSSName> <ConnFuncAddr>bbbbbb</ConnFuncAddr> <DSSNum>44</DSSNum> <isRemoved>false</isRemoved> </Subsystem> 我无法获得ConnNum,IsMSPA,IsArray和IsDDOR. //get ConnNum Node n = doc.getFirstChild(); if (n.hasChildNodes()) System.out.println(n.getFirstChild().getNodeValue()); else System.out.println(n.getNodeValue()); 但是当我期待1时它只返回null. import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class test { public static void main(String[] args) { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); for (int i = 1; i <= 8; i++) { Document doc = db.parse("file" + i + ".xml"); doc.getDocumentElement ().normalize (); System.out.println ("Root element of the doc is " + doc.getDocumentElement().getNodeName()); //get ConnNum Node n = doc.getFirstChild(); if (n.hasChildNodes()) System.out.println(n.getFirstChild().getNodeValue()); else System.out.println(n.getNodeValue()); NodeList listOfSubsystems = doc.getElementsByTagName("Subsystem"); int totalSubsystems = listOfSubsystems.getLength(); if (totalSubsystems == 0) continue; else { System.out.println("Total number of subsystems : " + totalSubsystems + "n"); Dish dish = new Dish(); for(int s=0; s < listOfSubsystems.getLength() ; s++) { Node firstPersonNode = listOfSubsystems.item(s); if(firstPersonNode.getNodeType() == Node.ELEMENT_NODE) { Element firstPersonElement = (Element)firstPersonNode; printElement(firstPersonElement,"SSName"); printElement(firstPersonElement,"GenericSSName"); printElement(firstPersonElement,"ConnFuncAddr"); printElement(firstPersonElement,"DSSNum"); printElement(firstPersonElement,"SCNum"); printElement(firstPersonElement,"SCAcronym"); printElement(firstPersonElement,"PassNum"); printElement(firstPersonElement,"FzCode"); printElement(firstPersonElement,"isRemoved"); System.out.println("------------------"); } } System.out.println("n=============================="); } } } catch(ParserConfigurationException pce) { pce.printStackTrace(); } catch(SAXException se) { se.printStackTrace(); } catch(IOException ioe) { ioe.printStackTrace(); } } public static void printElement(Element a,String name) { NodeList elementList = a.getElementsByTagName(name); Element b = (Element)elementList.item(0); if (b != null) { NodeList list = b.getChildNodes(); System.out.println( ((Node)list.item(0)).getNodeValue().trim() ); } } } 解决方法
也许第一个孩子不是你想象的那样.
Whitespace在XML中很重要,firstChild可能实际上是一个文本节点.
Nodes有一个类型,你可以迭代所有检查Element节点类型的子节点来获取实际元素的句柄. 编辑:这将打印您之后的值.它在Element节点上进行过滤,然后对每个节点的第一个子节点(包含文本的节点)进行过滤. NodeList nodeList = n.getChildNodes(); for (int j = 0; j < nodeList.getLength(); j++) { Node childNode = nodeList.item(j); if (childNode.getNodeType() == Node.ELEMENT_NODE) { System.out.println(childNode.getNodeName() + " " + childNode.getFirstChild().getNodeValue()); } } 此外,正如@Steve Townsend正确编写的那样,如果您使用的是Java 1.5或更高版本,则可以使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |