[英]How to extract details from the xml files using java?
我有以下類型的XML文件,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eSummaryResult PUBLIC "-//NLM//DTD eSummaryResult, 29 October 2004//EN" "http://www.ncbi.nlm.nih.gov/entrez/query/DTD/eSummary_041029.dtd">
<eSummaryResult>
<DocSum>
<Id>224589801</Id>
<Item Name="Caption" Type="String">NC_000010</Item>
<Item Name="Title" Type="String">Homo sapiens chromosome 10, GRCh37.p10 Primary Assembly</Item>
<Item Name="Extra" Type="String">gi|224589801|gnl|ASM:GCF_000001305|10|ref|NC_000010.10||gpp|GPC_000000034.1||gnl|NCBI_GENOMES|10[224589801]</Item>
<Item Name="Gi" Type="Integer">224589801</Item>
<Item Name="CreateDate" Type="String">2002/08/29</Item>
<Item Name="UpdateDate" Type="String">2012/10/30</Item>
<Item Name="Flags" Type="Integer">544</Item>
<Item Name="TaxId" Type="Integer">9606</Item>
<Item Name="Length" Type="Integer">135534747</Item>
<Item Name="Status" Type="String">live</Item>
<Item Name="ReplacedBy" Type="String"/>
<Item Name="Comment" Type="String"><![CDATA[ ]]></Item>
</DocSum>
</eSummaryResult>
如何從node =“Item”中根據它的名稱值提取細節? 並且使用標准的java dom xml或者更好地使用任何其他xml解析器庫是為了這個目的嗎?
請嘗試以下代碼
/* Create a Document object (doc) from the xml */
NodeList list = doc.getElementsByTagName("Item");
for(int i=0;i<list.getLength();i++)
{
Node node = list.item(i);
NamedNodeMap namedNodeMap = node.getAttributes();
if(namedNodeMap.getNamedItem("Name").getTextContent().equalsIgnoreCase("Caption"))
{
System.out.println(node.getTextContent());
}
}
輸出應為NC_000010
如果只使用標准Java,XPath是要走的路:
private URL xml = getClass().getResource("/example.xml");
@Test
public void testExamples() throws Exception {
//assertEquals("NC_000010", extractUsingDom("Caption"));
assertEquals("NC_000010", extractUsingXPath("Caption"));
}
public String extractUsingXPath(final String name) throws XPathExpressionException, IOException {
// XPathFactory class is not thread-safe so we do not store it
XPath xpath = XPathFactory.newInstance().newXPath();
return xpath.evaluate(
String.format("/eSummaryResult/DocSum/Item[@Name='%s']", name), // xpath expression
new InputSource(xml.openStream())); // the XML Document
}
我建議使用StAX,試試這個(javax.xml.stream。*)
XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader rdr = f.createXMLStreamReader(new FileReader("test.xml"));
while (rdr.hasNext()) {
if (rdr.next() == XMLStreamConstants.START_ELEMENT) {
if (rdr.getLocalName().equals("Item")) {
System.out.println(rdr.getAttributeValue("", "Name"));
System.out.println(rdr.getElementText());
}
}
}
StAX必須始終是首要考慮因素。 請參閱http://en.wikipedia.org/wiki/StAX,您將了解原因
也許使用XPath?
Document dom = ...;
XPath xpath = XPathFactory.newInstance().newXPath();
String result = xpath.evaluate("/eSummaryResult/DocSum/Item[@Name='Title']", dom);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.