xerces Xpath - search node from another node

Xalan.jar 를 임포트해야 함

 

I have the follows XML:

    <ONIXMessage>
        <Product>
            <RecordReference>9786071502131</RecordReference>
            <RecordReference>9786071502131</RecordReference>
        </Product>
        <Product>
            <RecordReference>9786071502131</RecordReference>
        </Product>
    </ONIXMessage>

And the follows java code:

    Element ONIXmessage = document.getDocumentElement();
    products = XPathAPI.selectNodeList(ONIXmessage, "/ONIXMessage/Product");

    for(int i = 0;i < products.getLength();i++) {  
        Node product = products.item(i);

        NodeList prova = XPathAPI.selectNodeList(ONIXmessage, "/ONIXMessage/Product/RecordReference");
        System.out.println(prova.getLength());

        NodeList prova2 = XPathAPI.selectNodeList(product, "/ONIXMessage/Product/RecordReference");
        System.out.println(prova2.getLength()); 
    }   

This code returns: 3 3 3 3

I think this code should return 3 2 3 1 because the "prova" variable contains all "RecordReference" nodes of the document, and "prova2" only contains the specific "RecordReference" nodes of only one product node.

How I can use XPATH to get only the nodes of a particular product?

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 
 
   

1 Answer 1

The first parameter to XPathAPI#selectNodeList is the context for the XPath expression.

Passing the product variable is reasonable and correct, but your XPath query is wrong: a slash / in the beginning of an expression denominates the root node of the current context, which in this case is the <ONIXMessage/> element.

Instead, start at the current context which is represented by the dot .. Remember your new expression is starting at this context, so your new XPath would be ./RecordReference. You could even ommit the ./, but I prefer adding these two characters making the query easier to read and understand:

NodeList prova2 = XPathAPI.selectNodeList(product, "./RecordReference");
share|improve this answer

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
89 SWT Draw 2D : 2D « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 86
88 SWT Button Action : Button « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 77
87 SWT Button : Button « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 80
86 SWT XML Editor: Modify DOM : Text « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 116
85 Demonstrates TreeEditor : Tree « SWT JFace Eclipse « Java file 졸리운_곰 2015.07.28 132
84 Gradle을 이용하여 Java 프로젝트 빌드하기 졸리운_곰 2015.07.26 211
83 gradle을 이용한 빌드 자동화 file 졸리운_곰 2015.07.26 424
82 Maven을 넘어 Gradle로 가자. 졸리운_곰 2015.07.26 229
81 Gradle 시작하기 file 졸리운_곰 2015.07.26 259
80 REST with Java (JAX-RS) using Jersey - Tutorial file 졸리운_곰 2015.07.16 311
79 Tutorial – REST API design and implementation in Java with Jersey and Spring file 졸리운_곰 2015.07.16 694
78 12.2. Using REST in Java 졸리운_곰 2015.07.16 127
77 apache XERCES2-J Source and Binary file 졸리운_곰 2015.07.16 76
76 Multithreading in java with examples 졸리운_곰 2015.07.15 98
75 Communication between parent and child thread in Java 졸리운_곰 2015.07.15 84
74 Java - Interthread Communication 졸리운_곰 2015.07.15 87
73 JAVA 로 Shell 실행하기~ 졸리운_곰 2015.07.12 375
72 JAVA에서 쉘프로그램 실행시키기 졸리운_곰 2015.07.12 5485
71 JAVA Telnet 프로그램 코드 졸리운_곰 2015.07.12 747
70 Cliche Command-Line Shell file 졸리운_곰 2015.07.12 621
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED