您的位置:首页 > 其它

XPath解析属性、节点内容及遍历子节点

2016-01-08 17:02 573 查看
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  XPath text count