XPath定位XML文件内容

使用jdk的javax.xml.xpath.XPath 工具可定位XML文档中某段特定的信息,而不需要使用DOM树进行节点筛选。

XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 此标签的意思是 font标签下包含name和size两个标签,可以使用正则,每个XML规则都用<!ELEMENT>标签表示-->
<!DOCTYPE font[
	<!ELEMENT font (name,size)>
]>
<font>
	<part>
		<name title="this is title">
			<value>黑体</value>
			<age>11</age>
		</name>
		<size>38</size>
		<city>上海</city>
		<fangxiang>东南</fangxiang>
	</part>
	<part>
		<name>宋体</name>
		<size>23</size>
	</part>
	<part>
		<name>隶书</name>
		<size>43</size>
	</part>
</font>

XPath定位XML:

获取某个标签下所有的元素:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//       忽略标签间的空白符
        documentBuilderFactory.setIgnoringElementContentWhitespace(true);
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
            Document document =documentBuilder.parse(new File("/work/xml.xml"));

           XPathFactory xPathFactory= XPathFactory.newInstance();
            XPath xPath =xPathFactory.newXPath();
            NodeList nodeList=(NodeList)xPath.evaluate("/font/part",document, XPathConstants.NODESET);

            //获取根元素
            Element rootElement =document.getDocumentElement();
            //NodeList的item方法获取每个Node元素
            for (int i=0;i<nodeList.getLength();i++){
               Node node= nodeList.item(i);
               Element element=(Element) node;
               //获取标签名
                String tagName=element.getTagName();
                //若确定该标签下只有一个Text元素时直接调用getFirstChild方法即可
                Text text =(Text)element.getFirstChild();
                //获取Text元素的值
                String kk=text.getData().trim();
                //获取该标签下所有标签的所有文本,包括子标签等所有下级标签,只获取标签文本
                String jj=element.getTextContent();
                System.out.println("标签名是:"+tagName);
                System.out.println(kk);
                System.out.println(jj);
            }

获取某个标签下第一个元素标签:

在所需标签后面使用[]获取,数字从1开始

            Node nodeList=(Node)xPath.evaluate("/font/part[1]",document, XPathConstants.NODE);

获取某标签下元素标签的数量:

count("表达式")

Number num=(Number)xPath.evaluate("count(/font/part)",document, XPathConstants.NUMBER);

获取元素标签的属性值:

"表达式/@属性值名称"

        String title=xPath.evaluate("/font/part[1]/name/@title",document, XPathConstants.STRING).toString();

            System.out.println(title);

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值