2017-01-27 1 views
0

ValueIterator 형식의 cts.search 결과가 있습니다. 결과는 일부 XML 문서입니다. 자바 스크립트에서 XPath 대안을 찾고 있습니다. 나는 getElementByTagNameNS을 사용해 보았습니다.하지만 모든 요소를 ​​반복해야합니다. 나는 다음과 같은 것을 시도했다. -ValueIterator 또는 Array에서 XML 요소 가져 오기

var arr = searchResult.toArray(); 
var ids = []; 
for(var j=0; j<arr.length; j++) { 
    ids.push(arr[j].getElementsByTagNameNS(c, 'id')[0].textContent) 
} 

루프없이 할 수 있습니까? 각 요소를 반복하지 않고도?

답변

3

필자는 반복 반복을 제거하는 것에 대해 확신하지 못합니다 (결과적으로 반복자가 있음). MarkLogic에서 시퀀스가있을 때 상황이 바뀔 수 있습니다.
1) 어떤 캐스트 배열의 XPath의
2) 예를 들어 자바 스크립트

var res = []; 
for (var doc of cts.search("whatever")){ 
    res.push(doc.xpath("/path/to/whatever/text()")) 
} 
+0

에 배열 비효율적 캐스트가 유지되는 경우가 가능하다 :

이 내가 당신을 도와 볼 수있는 가장 가까운 다음과 같이 루프를 제거하십시오 :'searchResult.toArray(). map (function (docFound) {return docFound.xpath ('some/xpath/path')})'. – chriskelly

+0

나는 그것에 대해 생각했다. map 함수는 배열의 모든 멤버에 액세스해야하기 때문에 여전히 반복 형식을 사용합니다. 그리고 배열로 캐스팅 할 때, 나는 당신이 모든 내용을 추출했다고 믿는다. ML은 iterator로 유지하고 xpath 함수를 사용하여 전반적인 데이터를 덜 만지면 효과가 있다고 믿습니다. 텍스트 노드뿐입니다. MarkLogic에 대해 물어볼 재미있는 자료입니다. –

+0

아니요. 귀하의 접근 방식이 올바른 해결책이라고 생각합니다. OP가 정말로 자신의 코드에서 명시적인 루프를 피하고자한다면 'toArray()'는 구문적인 설탕이라는 이해와 함께 유지 될 수 있다고 지적했다. – chriskelly