XPath 가 NameSpace 를 만 났 을 때

1773 단어 XMLBlog
더 읽 기
jdk 5.0 에는 Xpath 에 대한 지원 이 포함 되 어 있 습 니 다. 아래 코드 를 통 해 Xpath 를 얻 을 수 있 습 니 다.
    XPathFactory  factory=XPathFactory.newInstance();
    XPath xPath=factory.newXPath();
    xPath.evaluate("xpaht_exp", dom/saxSource)//              

 그러나 xml 파일 이 1 개 이상 의 namespace 가 있다 면 xpath 를 사용 할 때 주의해 야 합 니 다. xpath 도 namespace 를 사용 해 야 합 니 다. 아래 코드 를 통 해 xpath 의 네 임 스페이스 를 지정 할 수 있 습 니 다.
xPath.setNamespaceContext(getNameSpaceContext());
  private NamespaceContext getNameSpaceContext() {
    return new NamespaceContext() {
        public String getNamespaceURI(String prefix) {
          String uri;
          if (prefix.equals("ns1")){
            uri = "http://www.imsglobal.org/xsd/imscp_v1p1";
          }else if (prefix.equals("ns2")){
            uri = "http://www.imsglobal.org/xsd/imsmd_v1p2";
          }else if(prefix.equals("xsi")){
            uri = "http://www.w3.org/2001/XMLSchema-instance";
          }else{
            uri = null;
          }
          return uri;
        }
        public Iterator getPrefixes(String val) {return null;}
        public String getPrefix(String uri) {return null;}
        
      };
  }

 이렇게 하면 Xpath 표현 식 을 사용 할 때 ns1, ns2 와 같은 네 임 스페이스 를 사용 할 수 있 습 니 다. 예제 코드 는 다음 과 같 습 니 다.
assert xPath.evaluate("/ns1:manifest/@identifier", manifestSource).equals("[0000]_manifest");
assert xPath.evaluate("/ns1:manifest/ns1:resources/ns1:resource[1]/ns1:metadata/ns2:lom/ns2:general/ns2:language", manifestSource).equals("ENGLISH");

 여기 상세 한 소개 가 있 습 니 다.http://blog.davber.com/2006/09/17/xpath-with-namespaces-in-java/

좋은 웹페이지 즐겨찾기