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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章