2013-07-17 4 views
2

나는 100KB에 대해 내 XML-file에 대한 질문에 XPath을 사용하고 있습니다.안드로이드 - XPath 매우 느림

나는 목록의 모든 값에 대해 배열과 쿼리를 반복하고있다.

불행히도 단일 쿼리는 디버거에서 약 3-4 초 ()가 소요되며 디버거는 사용하지 않는 경우 약간 적습니다.

왜 이렇게 느린가요? 테스트를 위해 Galaxy S2을 사용합니다. 나는 XPathConstants.NODESET evalution이 시간에 이루어집니다하지만 난 NodeList을하지 않습니다을 떠날 때

XPath xpath = XPathFactory.newInstance().newXPath(); 
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
builderFactory.setNamespaceAware(true); 
DocumentBuilder builder = builderFactory.newDocumentBuilder(); 

Document document = builder.parse(new File(file_on_internal_sd_url))); 

int size = mPrefs.getInt("no_ids", 0); 
for(int i=0;i<size;i++) { 
    String id= mPrefs.getString("id_" + i, null); 
    String expression = "/tag1/tag2[@id = '" + id+ "']"; 
    NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET); 
    if(nodes.getLength()>0) { 
     myElements.add((Element)nodes.item(0)); 
    } 
} 

업데이트

:

여기 내 코드입니다. 대신 빈 문자열을 반환합니다 ...

+0

함께 그 루프에서 3-4 MS 또는 모든 사람을 복용 _single_ 쿼리가 ? 귀하의 문서는 어떻게 생겼습니까? –

+0

하나의 쿼리에는 약 3-4 초가 걸립니다 (!). 내 문서에는 하나의 루트 노드와 많은 자식 노드가 있습니다. 손자도 없어. – Ron

+0

Ronvcan이 질문에 vtd-xml 태그를 추가 했습니까? –

답변

2

덕분에 나는 주위에 약간의 노력과 방법을 더 파서를 발견 @nvrmnd합니다 :

VTD-XML

가 여기에 devlopers에서 example을합니다.

그러나이 Tutorial가 더 나은 방법입니다 ...이 사람이 내가 인 것처럼 좌절되는 데 도움이

희망은 ...

+1

그것은 위에 표시되도록 자신의 대답을 받아 들일 것 같아요 :) – snrlx

+0

예 ... 15 담당자에 대해 미안해 :하지만 여전히 많은 감사합니다! – Ron

+1

자신 만의 질문에 답하는 것이 좋습니다. 사용 가능한 옵션을 비판적으로 검토 한 것입니다. 그것은 나에게 15 점 이상의 가치가있다;) – snrlx

1

XPath 자체는 큰 XML 문서를 반복 할 때 그리 효율적이지 않습니다. 나 자신은 로우 엔드 장치에서 ~ 200kb XML 파일의 파싱 값을 약 10 초 정도 소요하는 경험을했습니다.

그 후 저는 파서를 SAXParser로 다시 구현했으며 성능이 약 2 배 정도 향상되었습니다. 그래서 SAXParser를 사용해 보라고 제안합니다. 실제로 구현하기가 너무 어렵지 않고 거기에 몇 가지 자습서가 있습니다. SAX vs. DOM vs. XPath

가 나는 또한 그것은 단지 모양 때문에 노드 집합을 사용하지 않는 경우 평가는 시간에 이루어집니다 가정 또한 다양한 분석 방법의 주제를 다루는 유래에 대한 질문을 존재가

단일 노드에 대해 일치하는 노드를 찾자 마자 리턴합니다.

편집 : SAX로 XML-문서를 구문 분석은

당신이 그것을 반복와 개체 내에서 추구 정보를 저장하는 것을 의미한다. 이 자습서를 살펴보십시오. SAX Tutorial

작성자는 직원 정보를 구문 분석하고이를 개체로 변환하므로 사용자가 필요로하는 것입니다.

+0

좋은 소리입니다.하지만 어떻게 SAX 구문 분석 된 문서를 쿼리 할 수 ​​있습니까? – Ron

+1

내 게시물을 편집했습니다. 희망이 도움이됩니다. 도와 주셔서 감사합니다. – snrlx

+1

하지만 난 그 vtd - XML ​​파서가 더 나은 것 같아요 ... – Ron