我想让getElementByTagName("NAME").item(0).getTextContent()
将xml的所有子元素("CONNECTION"
和"DISTANCE"
)打印到控制台。 item(0)
调用显然只打印ArrayList
个连接的第一个元素。
XML:
<ROW>
<FACILITY>SEATTLE, WA</FACILITY>
<CONNECTIONS>
<CONNECTION>
<NAME>FARGO, ND</NAME>
<DISTANCE>1426</DISTANCE>
</CONNECTION>
<CONNECTION>
<NAME>SAN FRANCISCO, CA</NAME>
<DISTANCE>808</DISTANCE>
</CONNECTION>
</CONNECTIONS>
</ROW>
<ROW>
<FACILITY>SAN FRANCISCO, CA</FACILITY>
<CONNECTIONS>
<CONNECTION>
<NAME>SEATTLE, WA</NAME>
<DISTANCE>808</DISTANCE>
</CONNECTION>
<CONNECTION>
<NAME>DENVER, CO</NAME>
<DISTANCE>1249</DISTANCE>
</CONNECTION>
<CONNECTION>
<NAME>LOS ANGELES, CA</NAME>
<DISTANCE>382</DISTANCE>
</CONNECTION>
</CONNECTIONS>
</ROW>
的java:
ArrayList<String> connections = new ArrayList<>();
NodeList connectionsList = elem.getElementsByTagName("CONNECTIONS");
for (int j = 0; j < connectionsList.getLength(); j++) {
if (connectionsList.item(j).getNodeType() == Node.TEXT_NODE) {
continue;
}
entryName = connectionsList.item(j).getNodeName();
if (!entryName.equals("CONNECTIONS")) {
System.err.println("Unexpected node found: " + entryName);
return;
}
// Get some named nodes
elem = (Element) connectionsList.item(j);
String connectionName = elem.getElementsByTagName("NAME").item(0).getTextContent();
String connectionDist = elem.getElementsByTagName("DISTANCE").item(0).getTextContent();
facilities.addConnection(facilityName, connectionName, (Integer.parseInt(connectionDist)));
// Create a string summary of the tags
connections.add(connectionName + ":" + connectionDist);
}
输出应该如下所示:
Facility: SEATTLE, WA Direct Links: [FARGO, ND:1426, SAN FRANCISCO, CA:808]
Facility: SAN FRANCISCO, CA Direct Links: [SEATTLE, WA:808, DENVER, CO:1249, LOS ANGELES, CA:382]
实际输出仅打印第一个城市("CONNECTION"
)和每行的里程数。
任何帮助表示赞赏。
答案 0 :(得分:0)
根据你的xml结构,你需要迭代CONNECTION节点,并为每个节点打印NAME和DISTANCE文本内容。
NodeList connectionsList = doc.getElementsByTagName("CONNECTIONS");
for (int j = 0; j < connectionsList.getLength(); j++) {
if (connectionsList.item(j).getNodeType() == Node.TEXT_NODE) {
continue;
}
String entryName = connectionsList.item(j).getNodeName();
if (!entryName.equals("CONNECTIONS")) {
System.err.println("Unexpected node found: " + entryName);
return;
}
// Get some named nodes
Node elem = (Element) connectionsList.item(j).getChildNodes(); // list of CONNECTION ELEMENTS
List<String> facilities = new ArrayList<String>();
for(int i = 0 ; i< elem.getChildNodes().getLength() ;i++){
Node subElem = elem.getChildNodes().item(i); //CONNECTION ELEMENT
String connectionName ="";
String connectionDist = "";
for(int k = 0 ; k< subElem.getChildNodes().getLength(); k++){
Node connectionElem = subElem.getChildNodes().item(k);
if("NAME".equals(connectionElem.getNodeName())){
connectionName = connectionElem.getTextContent();
}
else if("DISTANCE".equals(connectionElem.getNodeName())){
connectionDist = connectionElem.getTextContent();
}
if(!connectionDist.equals("") && !connectionName.equals("")) {
facilities.add(connectionName + " , " + connectionDist);
connectionDist ="";
connectionName = "";
}
}
}
System.out.println("Facility: "+doc.getElementsByTagName("FACILITY").item(j).getTextContent() +" Direct Links: "+facilities);
}