您如何分别处理XML数据

时间:2018-08-05 15:08:12

标签: javascript jquery html xml

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

sizeForItem

3 个答案:

答案 0 :(得分:1)

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 );
}

答案 1 :(得分:0)

在遍历$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>

答案 2 :(得分:0)

您没有使用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>