xpath 조회 xml

8357 단어 xpath
데이터베이스 에서 SQL 을 사용 하여 데 이 터 를 조회 하 는 것 과 유사 합 니 다.XPath 는 XML 문서 에서 정 보 를 쉽게 찾 을 수 있 는 언어 로 XML 문서 에서 요소 와 속성 을 옮 겨 다 닐 수 있 습 니 다.XPath 는 XML 문서 의 노드 나 노드 집합 을 선택 하기 위해 경로 표현 식 을 사용 합 니 다.노드 는 경로(path)나 걸음(steps)을 따라 선택 합 니 다.
    비록 매우 강 한 표 현 력 을 가지 고 있 지만 XPath 는 자바 언어 가 아니 라 사실상 XPath 는 완전한 프로 그래 밍 언어 가 아니다.XPath 로 표현 하지 못 하 는 것 이 많 고 심지어 어떤 조회 도 표현 할 수 없다.다행히도 XPath 를 자바 프로그램 에 결합 시 키 면 두 가지 장점 을 발휘 할 수 있다.자바 가 자바 가 잘 하 는 것,XPath 가 XPath 가 잘 하 는 것 이다.
    처음에는 자바 프로그램 이 XPath 조 회 를 수행 하 는 데 필요 한 응용 프로그램 프로 그래 밍 인터페이스(API)가 각양각색의 XPath 엔진 에 따라 각각 달 랐 다.Xalan 은 API 가 있 는데 Saxon 은 다른 것 을 사용 하고 다른 엔진 은 다른 API 를 사용한다.이것 은 코드 가 종종 당신 을 한 제품 으로 제한 한 다 는 것 을 의미 합 니 다.부적 절 한 번 거 로 움 을 가 져 오 거나 코드 를 다시 만 들 지 않 고 다양한 성능 을 가 진 엔진 을 시험 해 보 는 것 이 좋 습 니 다.
    다행히도 자바 5 는 자바 x.xml.xpath 패 키 지 를 출시 하여 엔진 과 대상 모델 이 독립 된 XPath 라 이브 러 리 를 제공 합 니 다.이 패 키 지 는 자바 1.3 및 이후 버 전에 도 사용 할 수 있 지만 자바 API for XML Processing(JAXP)1.3 을 따로 설치 해 야 합 니 다.Xalan 2.7 과 Saxon 8 및 기타 제품 은 이 라 이브 러 리 의 실현 을 포함한다.
여기 서 먼저 xpath 의 기본 문법 을 간단하게 소개 한 다음 에 상세 한 예 를 들 자.노드 선택 문법:
노드 경로 표현 식:
표현 식 설명
nodename	           
/	      
//	                  ,         
.	      
..	          
@	    

서술 어(특정한 노드 를 찾 거나 특정한 값 을 포함 하 는 노드 를 찾 을 때 보통[]에 사용 합 니 다)
경로 식 결과
/bookstore/book[1]	     bookstore         book   。
/bookstore/book[last()]	     bookstore          book   。
/bookstore/book[last()-1]	     bookstore           book   。
/bookstore/book[position()<3]	           bookstore         book   。
//title[@lang]	         lang      title   。
//title[@lang='eng']	     title   ,          eng   lang   。
/bookstore/book[price>35.00]	     bookstore     book   ,     price         35.00。
/bookstore/book[price>35.00]/title	     bookstore      book     title   ,     price         35.00。

노드 어댑터:
어댑터 설명
*	        
@*	        
node()	         

경로 조합 식,여러 경로 표현 식 을 조합 하여 선택 범 위 를 확대 합 니 다.예 를 들 면:
//book/title|/book/price 는 모든 북 요소 의 title 과 price 요 소 를 선택 합 니 다.
또한 xpath 의 축 과 연산 자 에 대해 서 는 더 이상 자세히 말 하지 않 고 관심 있 는 것 은 뒤의 참고 자 료 를 참조 할 수 있 습 니 다.
자바 에서 xpath 를 사용 하여 xml 의 정 보 를 추출 하 는 방법 을 보 여 줍 니 다.
xml 파일 test.xml 내용:
Xml 코드 
<?xml version="1.0" encoding="ISO-8859-1"?>  
<bookstore>  
    <book category="COOKING">  
        <title lang="en">Everyday Italian</title>  
        <author>Giada De Laurentiis</author>  
        <year>2005</year>  
        <price>30.00</price>  
    </book>  
    <book category="CHILDREN">  
        <title lang="en">Harry Potter</title>  
        <author>J K. Rowling</author>  
        <year>2005</year>  
        <price>29.99</price>  
    </book>  
    <book category="WEB">  
        <title lang="en">XQuery Kick Start</title>  
        <author>James McGovern</author>  
        <author>Per Bothner</author>  
        <author>Kurt Cagle</author>  
        <author>James Linn</author>  
        <author>Vaidyanathan Nagarajan</author>  
        <year>2003</year>  
        <price>49.99</price>  
    </book>  
    <book category="WEB">  
        <title lang="zh">Learning XML</title>  
        <author>Erik T. Ray</author>  
        <year>2003</year>  
        <price>39.95</price>  
    </book>  
</bookstore>  

xml 파일 의 노드 정 보 를 추출 하 는 자바 코드:
Java    
/** 
 * "/"       <br/> 
 * "/AA"      AA<br/> 
 * "/AA/BB"          BB  <br/> 
 *  
 * "//"       <br/> 
 * "//BBB"         BBB   <br/> 
 * "//DDD/BBB"         DDD BBB  <br/> 
 *  
 * "*"                     <br/> 
 * "/AAA/CCC/DDD/*"          /AAA/CCC/DDD   <br/> 
 * "//*"        
 *  
 * "/AAA/BBB[1]"   AAA    BBB   <br/> 
 * "/AAA/BBB[last()]"   AAA     BBB   <br/> 
 *  
 * "//@id"      id  <br/> 
 * "//BBB[@id]"    id   BBB  <br/> 
 * "//BBB[@name]"    name   BBB  <br/> 
 * "//BBB[@*]"         BBB  <br/> 
 * "//BBB[not(@*)]"        BBB  <br/> 
 *  
 * "//BBB[@id='b1']"       id    'b1' BBB  <br/> 
 * "//BBB[@name='bbb']"       name    'bbb' BBB  <br/> 
 * "//BBB[normalize-space(@name)='bbb']" 
 *       name   (  normalize-space         ) 'bbb' BBB  <br/> 
 *  
 * "//*[count(BBB)=2]"     2 BBB      <br/> 
 * "//*[count(*)=2]"     2       <br/> 
 * "//*[name()='BBB']"        BBB   (     //BBB)<br/> 
 * "//*[starts-with(name(),'B')]"        "B"     <br/> 
 * "//*[contains(name(),'C')]"         "C"   <br/> 
 *  
 * "//CCC | //BBB"      CCC BBB  <br/> 
 * "/AAA/EEE | //BBB"      BBB      AAA     EEE  <br/> 
 */  
  
InputSource inputSource = new InputSource(new FileInputStream("test.xml"));  
XPathFactory factory = XPathFactory.newInstance();  
XPath xPath = factory.newXPath();  
XPathExpression expression = xPath.compile("//book/title[@lang=\"en\"]");  
NodeList list = (NodeList) expression.evaluate(inputSource, XPathConstants.NODESET);  
for (int i = 0; i < list.getLength(); i++) {  
    Node node = list.item(i);  
    System.out.println(node.getNodeName());  
}  

해석 절 차 는 다음 과 같다.
1.xml 파일 가 져 오기
자바 코드 
InputSource inputSource = new InputSource(new FileInputStream("test.xml")); 
//혹은 DOM 으로 해석 
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document doc = builder.parse("test.xml"); 
2.다음 에 XPath Factory 를 만 듭 니 다:
자바 코드 
XPathFactory factory = XPathFactory.newInstance(); 
3.그리고 이 공장 을 이용 하여 XPath 대상 을 만 듭 니 다.
자바 코드 
XPath xPath = factory.newXPath(); 
4.XPath 대상 을 사용 하여 XPath 표현 식 을 컴 파일 합 니 다.
자바 코드 
XPathExpression expression = xPath.compile("//book/title[@lang=\"en\"]"); 
5.표현 식 의 evaluate()를 사용 하고 결 과 를 처리 합 니 다.
자바 코드 
NodeList list = (NodeList) expression.evaluate(inputSource, XPathConstants.NODESET); 
for (int i = 0; i < list.getLength(); i++) { 
    Node node = list.item(i); 
    System.out.println(node.getNodeName()); 

evaluate()방법 은 Object 로 돌아 가 는 것 으로 밝 혀 졌 습 니 다.실제 XPath 표현 식 에 의존 하 는 결과 와 요구 하 는 유형 을 되 돌려 줍 니 다.일반적으로 XPath 의
number 는 java.lang.Double 로 매 핑 됩 니 다.
string 은 java.lang.String 으로 매 핑 됩 니 다.
boolean 맵 은 자바.lang.boolean 입 니 다.
node-set 맵 은 org.w3c.dom.NodeList 입 니 다.
자바 에서 XPath 표현 식 을 계산 할 때 두 번 째 매개 변 수 는 필요 한 반환 형식 을 지정 합 니 다.다섯 가지 가능성 이 있 습 니 다.모두 javax.xml.xpath.XPath Constants 류 에서 상수 라 고 명명 되 었 습 니 다.
XPathConstants.NODESET
XPathConstants.BOOLEAN
XPathConstants.NUMBER
XPathConstants.STRING
XPathConstants.NODE
    xpath 를 사용 하여 xml 를 분석 할 때 주의해 야 할 부분 이 많 습 니 다.XML 문서 의 요소 가 이름 공간 에 있다 면 이 문 서 를 조회 하 는 XPath 표현 식 은 같은 이름 공간 을 사용 해 야 합 니 다.XPath 표현 식 은 꼭 같은 접 두 사 를 사용 할 필 요 는 없습니다.이름 공간 URI 만 같 으 면 됩 니 다.사실 XML 문서 가 기본 이름 공간 을 사용한다 면 대상 문서 에 접 두 사 를 사용 하지 않 았 음 에 도 불구 하고 XPath 표현 식 은 접 두 사 를 사용 해 야 합 니 다.또한 자바 에서 xpath 함 수 를 확장 할 수 있 습 니 다.더 많은 정 보 는 아래 의 참고 자 료 를 참조 하 시기 바 랍 니 다.
전재 하 다  http://berdy.iteye.com/blog/807883

좋은 웹페이지 즐겨찾기