【问题标题】:How do you for each on XML data你如何为每个 XML 数据
【发布时间】:2019-01-12 16:45:14
【问题描述】:

我试图从一些 XML 数据中获取频道显示名称和频道 ID,但似乎无法正常工作。对于每个频道显示名称,我要获取频道显示名称和频道 ID,这是我尝试过的,它会获取数据,但会将它们全部放入一个字符串中,我希望它们在单独的行中。

var xml = "<tv generator-info-name='tvchannels' source-info-name='tvchannels'><channel id='1234'><display-name>Channel 1</display-name></channel><channel id='5678'><display-name>Channel 2</display-name></channel><channel id='543553'><display-name>Channel 3</display-name></channel><channel id='324324'><display-name>Channel 4</display-name></channel></tv>",

xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc );

$xml.find("display-name").each(
        function (i,e) {

$('#title').append($xml.find("display-name"));

$('#channelid').append($xml.find("channel").attr("id"));

});

【问题讨论】:

    标签: javascript jquery html xml


    【解决方案1】:

    您没有使用 find 方法的结果。我相信你需要像

    var xml = "<tv generator-info-name='tvchannels' source-info-name='tvchannels'><channel id='1234'><display-name>Channel 1</display-name></channel><channel id='5678'><display-name>Channel 2</display-name></channel><channel id='543553'><display-name>Channel 3</display-name></channel><channel id='324324'><display-name>Channel 4</display-name></channel></tv>",
    
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc );
    
    $xml.find("channel").each(function(index, e) {
        $('#title').append($(e).find("display-name").text() + '<br />');
    
        $('#channelid').append(e.getAttribute("id") + '<br />');
    });
    <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
    <div id="title"></div>
    <div id="channelid"></div>

    【讨论】:

      【解决方案2】:

      XPATH 和 XSL/XSLT 可以做到这一点,但是与 javascript/JSON 相比,它们可能难以学习/使用。首选 JavaScript 对象表示法 JSON。来看看

      XPath Examples 来自微软

      Introduction to using XPath in JavaScript 来自 MDN。

      迭代器示例

      var iterator = document.evaluate('//phoneNumber', documentNode, null, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null );
      
      try {
        var thisNode = iterator.iterateNext();
        
        while (thisNode) {
          alert( thisNode.textContent );
          thisNode = iterator.iterateNext();
        }   
      }
      catch (e) {
        alert( 'Error: Document tree modified during iteration ' + e );
      }
      

      【讨论】:

        【解决方案3】:

        当您循环通过$xml 时,您需要使用$(this) 或传递给.each() 的第二个参数,以便在循环时访问各个通道。请看下面的代码:

        var xml = "<tv generator-info-name='tvchannels' source-info-name='tvchannels'><channel id='1234'><display-name>Channel 1</display-name></channel><channel id='5678'><display-name>Channel 2</display-name></channel><channel id='543553'><display-name>Channel 3</display-name></channel><channel id='324324'><display-name>Channel 4</display-name></channel></tv>",
        
        xmlDoc = $.parseXML( xml ),
        $xml = $( xmlDoc );
        
        $xml.find('channel').each(function (i,e) {
          $('#title').append($(this).find("display-name"));
          $('#title').append($('<br />'));
        
          $('#channelid').append($(this).attr("id"));
          $('#channelid').append($('<br />'));
        
        });
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
        Titles: <br />
        <div id="title"></div><br />
        Channel IDs: <br />
        <div id="channelid"></div>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-16
          • 1970-01-01
          • 2016-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-04
          相关资源
          最近更新 更多