xpath 조회 xml
8357 단어 xpath
비록 매우 강 한 표 현 력 을 가지 고 있 지만 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GAS(Google Apps Script)에서 정기적으로 값을 기록하는 프로그램을 만들어 보았습니다.Google 스프레드시트에서 특정 사이트의 특정 값을 XPath로 추출한 다음 해당 값을 GAS(Google Apps Script)로 정기적으로(1시간 동안) Google 스프레드시트의 별도 시트에 기록합니다. 가는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.