0
使用DOM-XML兩個元素是否有使用「的getElementsByTagName」查詢在JAVA
我試圖讓我的程序解析和XML從兩個不同的標記「學校DOM來查詢兩個標籤名AA方式「&」醫院「,並顯示每個的」ID「和」文本「屬性
這可能嗎?
我的代碼是:
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 DomParse {
public static void main(String[] args) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("input2.xml");
NodeList School = doc.getElementsByTagName("School");
for(int i=0;i<School.getLength();i++){
Node p = School.item(i);
if(p.getNodeType()==Node.ELEMENT_NODE){
Element person = (Element) p;
String id = person.getAttribute("id");
NodeList nameList = person.getChildNodes();
for(int j=0;j<nameList.getLength();j++){
Node n = nameList.item(j);
if(n.getNodeType()==Node.ELEMENT_NODE){
Element name = (Element) n;
System.out.println("School " + id + ": " + "\n" + "\n" + name.getTextContent());
NodeList Hospital = doc.getElementsByTagName("Hospitals");
for(int z=0;z<Hospital.getLength();z++){
Node k = Hospital.item(z);
if(k.getNodeType()==Node.ELEMENT_NODE){
Element uc = (Element) k;
NodeList uniqueList = uc.getChildNodes();
for(int l=0;l<uniqueList.getLength();l++){
Node a = uniqueList.item(l);
if(a.getNodeType()==Node.ELEMENT_NODE){
Element uniqcon = (Element) a;
System.out.println("Hospitals " + id + ": " + "\n" + "\n" + uniqcon.getTextContent() + "\n");
}
}
}
}
}
}
}
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸入文件是:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<school>
<Hospitals size="standard">
<Hospital codeSet="base" included="true" analysis="nI" definedAt="scan" id="0">
<text>New England Medical. Services only urgent procedures.</text>
<scanPatterns>
<scanPattern occurs="1" scanPatternId="45" definedAt="scan" id="0"/>
<scanPattern occurs="1" scanPatternId="46" definedAt="scan" id="1"/>
</scanPatterns>
</Hospital>
<Hospital codeSet="base" included="true" analysis="I" SchoolId="4" definedAt="scan" id="1">
<text>Gibson Memorial. 20 miles away.</text>
<scanPatterns>
<scanPattern occurs="1" scanPatternId="42" definedAt="scan" id="0"/>
<scanPattern occurs="1" scanPatternId="39" definedAt="scan" id="1"/>
</scanPatterns>
</Hospital>
</Hospitals>
<Schools>
<School definedAt="scan" id="0">
<text>Craven County Middle School</text>
</School>
<School definedAt="scan" id="1">
<text>WestLake Middle School</text>
</School>
</Schools>
</school>
在DOM導航是痛苦的,看看XPath的一個更簡單的方法訪問文檔中的值http://stackoverflow.com/a/2811101/3215527 – wero
您可以創建一個方法獲取'NodeList'作爲輸入,循環遍歷元素並打印所需的值。假設該方法的名字是'printElements',你可以使用'printElements(doc.getElementsByTagName(「School」)''和'printElements(doc.getElementsByTagName(「Hospital」)''來調用它。另外:爲什麼你打印所有的醫院學校? –