2017-01-27 6 views
0

私はValueIteratorの形式でcts.searchの結果を持っています。結果はいくつかのXML文書です。私はJavaScriptで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)の例をJavascriptを

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

私はそれについて考えました。マップ関数は配列のすべてのメンバーにアクセスする必要があるため、まだ繰り返しの形式を実行します。あなたが配列にキャストするとき、私はあなたが今それにアクセスしたので、すべてのコンテンツを抽出したと信じています。私は、反復子としてそれを保持し、全体的に少ないデータに触れるxpath関数(テキストノードのみ)を使用すると、MLが十分に有効であると信じています。これはMarkLogicに尋ねる楽しいものです。 –

+0

いいえ、あなたのアプローチが正しい解決策だとは確信しています。 OPが本当に自分のコードで明示的なループを避けたいのであれば、toArray()は構文的な砂糖であるという理解のもとに保つことができます。 – chriskelly

関連する問題