【问题标题】:Finding an XML element value using Jquery使用 Jquery 查找 XML 元素值
【发布时间】:2012-09-04 03:49:38
【问题描述】:

我有一个 XML 文件,我需要使用 Jquery 和 Ajax 查找特定 PK 的项目 到目前为止,我已经了解了这个对象,但我有两个问题:

  1. 有比循环查找 pk 值更好的方法吗?
  2. 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>

【问题讨论】:

    标签: jquery xml ajax


    【解决方案1】:

    首先,您必须编写正确的 XML 字符串,就像您必须完成/结束最后一个开始的相同标签一样。在上面的示例代码中,您在关闭时犯了错误。这是错误的 xml 语法。请进行如下更正: 1 测试

    在这里,我制作了用于解析 XML 数据或标签的示例箱,而不是 Ajax,我只在按钮单击事件上解析 xml 数据,因为在箱上 Ajax 调用无法调用外部文件。

    这里是演示: 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

    【讨论】:

    • 我不知道为什么我觉得这个答案很好,但远非我想要的......我有外部 xml 文件,所以我确实需要点击 ajax 调用......还有我的问题是如何通过 id 获取特定节点
    • 嗨,我已经修改了 bin 并进行了必要的更改,以通过 xml 数据中的特定节点 id 查找 Pk 项。请单击以下链接并检查它对您有用吗..? codebins.com/bin/4ldqp7u/2
    • @gaurang171 如果我们有多个标签名称,我们如何获取这些标签的值?例如如何为每个 ?id1namefruitscategory美国水果categoryIconsomsite.com/categories/1.jpg</string> countryUS
    【解决方案2】:

    至少,您可以使用比“pk”更具体的查询。在本例中,$(xml).find("products item pk") 应该更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多