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

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED