2013-03-05 1 views
1

내 응용 프로그램의 경우 루트 노드의 네임 스페이스를 확인하기 만하면되므로이 네임 스페이스를 얻기 위해 단일 작업을 실행하고 싶습니다.VTD-XML을 사용하여 지정된 요소의 네임 스페이스 찾기

선언 된 네임 스페이스를 모두 가져 오는 XPath를 사용하는 코드가 있는데 (모두 /*/namespace::*), 그 다음에는 모든 것을 처리해야하며 각각에 대해 vn.toRawString을 사용하여 접두사와 비교해보십시오. 피하기 위해.

xmlns : attributes는 getAttrValNS에서 고려되지 않았으므로 분명히 여기에 명백한 내용이 누락되어 있습니다.하지만 주어진 요소의 네임 스페이스를 얻는 가장 좋은 방법은 무엇입니까?

String elementName = vn.toRawString(vn.getCurrentIndex()); 

String prefix = prefix(elementName); 
String localName = localName(elementName); 

QName rootQName; 
if (prefix == null) { 
    rootQName = new QName(localName); 
} else { 
    int nsIndex = vn.getAttrValNS("xmlns", prefix); 

    // Can't find index because xmlns attributes are not included 

    String namespace = vn.toRawString(nsIndex); 
    rootQName = new QName(namespace, localName); 
} 

단지 나에게 루트 노드가 아닌 루트 노드에 선언 된 모든 네임 스페이스의 네임 스페이스를 제공하는 간단한 XPath를가 있습니까?

+1

나는 VTD-XML과 같은 XPath 함수를 지원하는 생각 네임 스페이스 URI (노드 집합?) 당신이 속임수를 썼는지 –

+0

... 조사 할 수 있습니다. 'AutoPilot ap = 새로운 자동 조종 장치 (vn); ap.selectXPath ("namespace-uri (.)"); String ns = ap.evalXPathToString();' –

답변

1
AutoPilot ap = new AutoPilot(vn); 
ap.selectXPath("namespace-uri(.)"); 
String ns = ap.evalXPathToString();