String xml =
"<?xml version='1.0' encoding='UTF-8'?>" +
"<definition id=\"26743\">" +
" <metadata>" +
" <title>AIX OpenSSL Denial of Service...</title>" +
" <affected family=\"unix\">" +
" <platform>IBM AIX 6.1</platform>" +
" <platform></platform>" +
" <platform>IBM AIX 7.1</platform>" +
" </affected>" +
" </metadata>" +
"</definition>";
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
XPath xpath = XPathFactory.newInstance().newXPath();
/* 1、取节点属性 */
String id = (String) xpath.evaluate(
"/definition/attribute::id", document, XPathConstants.STRING);
System.out.println(id);
String family = (String) xpath.evaluate(
"/definition/metadata/affected/attribute::family", document, XPathConstants.STRING);
System.out.println(family);
/* 2、取节点文本内容 */
String title = (String) xpath.evaluate(
"/definition/metadata/title/text()", document, XPathConstants.STRING);
System.out.println(title);
/* 3、遍历子节点取文本 */
//方法1 通过document取子节点个数
/*int len = document.getElementsByTagName("affected").item(0).getChildNodes().getLength();*/
//方法2 通过xpath取子节点集合
/*NodeList nodeSet = (NodeList)xpath.evaluate(
"/definition/metadata/affected/platform", document, XPathConstants.NODESET);
int len = nodeSet.getLength();*/
//方法3 通过count函数取子节点个数
int len = Integer.parseInt(xpath.evaluate(
"count(/definition/metadata/affected/platform)", document, XPathConstants.STRING).toString());
for (int i = 1; i <= len; i++) {
String platform = (String) xpath.evaluate(
"/definition/metadata/affected/platform[" + i + "]/text()",
document, XPathConstants.STRING);
System.out.println(platform);
}
转载于:https://my.oschina.net/h2do/blog/599807