Ajax呼び出しから返されたXML文字列を解析しようとしたときに問題が発生しました。 XMLの構造は次のとおりです。XPath式がJQueryで失敗する
<?xml version="1.0" encoding="UTF-8"?>
<endPointDefs>
<endPointDef>
<useCaseId>USER_LOGIN</useCaseId>
<endPointUrl>/core.authenticate.do</endPointUrl>
<endPointUrlParams>
<endPointUrlParam name="MsgFormat">
<urlParamType>SYSTEM_DEFINED</urlParamType>
<urlParamValueSystemDefined>USER_LOGIN</urlParamValueSystemDefined>
</endPointUrlParam>
<endPointUrlParam name="userId">
<urlParamType>USER_PROVIDED</urlParamType>
</endPointUrlParam>
<endPointUrlParam name="password">
<urlParamType>USER_PROVIDED</urlParamType>
</endPointUrlParam>
<endPointUrlParam name="language">
<urlParamType>USER_PROVIDED</urlParamType>
</endPointUrlParam>
</endPointUrlParams>
</endPointDef>
</endPointDefs>
ただし、useCaseId USER_LOGINのタグの値が必要です。このため、一般的なXPath式は次のようにする必要があり、次のように
/endPointDefs/endPointDef[useCaseId='USER_LOGIN']/endPointUrl
を私はjavascriptの変数にAJAX呼び出しからの応答を保存:
var endPointDefs=null;
次のようにこの変数は、Ajaxのコールからの人口です。次のように
$.ajax(
{
type:"POST",
url: "<%=request.getContextPath()%>/data/EndPointDefs.xml",
dataType:"XML",
success:function(data){
//alert("End Points Loaded: " + data);
endPointDefs=data;
},
error: function() {
alert('an error occurred! which trying to fetch the end point definitions');
}
}
);
私はjQueryのを使用してXPathクエリを実行しようとしました:
$("endPointDefs/endPointDef[useCaseId='USER_LOGIN']/endPointUrl",endPointDefs).each(function(){
$('#txtUseCase').val('USER_LOGIN');
$('#txtEntryPointURL').val($(this).text());
})
これは、ここでのショーだったものの修正版です: http://www.compoc.com/tuts/
ものの、別のアプローチは、すべてのendPointDef要素を反復し、useCaseIdの値を検査することであろうと、それは私の文字列と一致した場合、[USER_LOGIN ]をクリックし、テキストボックスにテキストを設定します。しかし、より洗練されたアプローチは、上記のXPATH式を使用することです。これは、私が望む結果をワンショットで得ることができます。
私は多くの組み合わせを試しましたが、何も動作していないようです。 JQueryはこの種のXPathクエリをサポートしていますか?もしそうなら、誰かが私が間違っているところを教えてもらえますか?
号は、それが動作しません。私は[]タグの値ではなく、属性を選択するためだと思います。 XPATHの場合、属性として[@ attr = value]構文を使用します。 – Sriraman
本当ですか?私はここに例を示します:http://jsfiddle.net/cGuLg/(見つかった要素の数を1にして '警告します'おそらく 'endPointDefs'の代わりに' $(endPointDefs) 'を使うべきでしょうか? –
これは$( "endPointDef> useCaseId:contains( 'USER_LOGIN')+ endPointUrl"、endPointDefs) あなたの時間のおかげで、私はCSSセレクタを習得しなければならないと思います:) – Sriraman