4

Jquery と Ajax を使用して特定の PK のアイテムを見つけるために必要な XML ファイルがありますが、オブジェクトについては理解できましたが、2 つの質問があります。

  1. pk 値を見つけるためにループを実行するよりも良いアイデアはありますか?
  2. XML は大きいので、メモリにロードするよりも XML をクエリするためのより良い方法があるかどうかを知る必要があります。XSLT の方が効果的ですか? それとも、jquery よりも優れた方法がありますか?

これが私のコードです

$.ajax({
    url: 'xml/products.xml',
    dataType: 'html',
    success: function(xml) {
        $(xml).find('pk').each(function() {
            if ($(this).text() == "1")
            //do something
        });
    }
});

そして、ここに私のxmlがあります

<products>
<item>
    <pk>1</pk>
    <name>test</name>
</item>
<item>
    <pk>2</pk>
    <name>test2</name>
</item>
<item>
    <pk>3</pk>
    <name>test3</name>
</item>
<item>
    <pk>4</pk>
    <name>test4</name>
</item>
</products>
4

2 に答える 2

6

最初に、最後に開始された同じタグを完了/終了する必要があるように、正しい XML 文字列を記述する必要があります。上記のサンプル コードでは、 を閉じるのを間違えています。xml 構文が間違っています。以下のように修正してください: 1 テスト

ここでは、XML データまたはタグを解析するためのサンプル ビンを作成しました。ビンでは Ajax 呼び出しで外部ファイルを呼び出すことができないため、Ajax の代わりにボタン クリック イベントで xml データを解析します。

ここにデモがあります: http://codebins.com/bin/4ldqp7u

HTML

<div>
  <input type="button" id="btnxml" value="Get XML Data" />
  <input type="button" id="btnreset" value="Reset" style="display:inline"/>
  <div id="result">
  </div>
</div>
<div id="xmldata">
  <products>
    <item>
      <pk>
        1
      </pk>
      <name>
        test
      </name>
    </item>
    <item>
      <pk>
        2
      </pk>
      <name>
        test2
      </name>
    </item>
    <item>
      <pk>
        3
      </pk>
      <name>
        test3
      </name>
    </item>
    <item>
      <pk>
        4
      </pk>
      <name>
        test4
      </name>
    </item>
  </products>
</div>

JQuery:

$(function() {
    $("#btnxml").click(function() {
        var xml = "<rss version='2.0'>";
        xml += $("#xmldata").html();
        xml += "</rss>";
        var xmlDoc = $.parseXML(xml),
            $xml = $(xmlDoc);

        var result = "";
        if ($xml.find("item").length > 0) {

            result = "<table class='items'>";
            result += "<tr><th>PK</th><th>Name</th></tr>";

            $xml.find("item").each(function() {
                result += "<tr>";
                result += "<td>" + $(this).find("pk").text() + "</td>";
                result += "<td>" + $(this).find("name").text() + "</td>";
                result += "</tr>";
            });

            result += "</table>";
            $("#result").html(result);
        }


    });

    //Reset Result 
    $("#btnreset").click(function() {
        $("#result").html("");
    });

});

CSS:

#xmldata{
  display:none;
}
table.items{
  margin-top:5px;
  border:1px solid #6655a8;
  background:#55a5d9;
  width:20%;
}
table.items th{
  border-bottom:1px solid #6655a8;
}
table.items td{
  text-align:center;
}
input[type=button]{
  border:1px solid #a588d9;
  background:#b788d9;
}

デモ: http://codebins.com/bin/4ldqp7u

于 2012-09-04T06:29:21.053 に答える
1

少なくとも、「pk」だけでなく、より具体的なクエリを使用できます。この例では、より高速で$(xml).find("products item pk")ある必要があります。

于 2012-09-04T03:52:30.340 に答える