通过jQuery读取XML文件时出现问题

problem with reading an xml file by jquery

提问人:ReA 提问时间:8/7/2023 最后编辑:ReA 更新时间:8/7/2023 访问量:22

问:

我想使用 JQuery 读取 xml 文件。除了读取 XML 文件中 linke 元素的文本部分外,代码几乎正在做我想要的事情。我的代码片段如下所示:

HTML 文件:

<!DOCTYPE html>
<html lang="en">  
<meta name="viewport" content="width=device-width, initial-scale=1"; charset="UTF-8">
    <head><title>Reading XML File Using jQuery AJAX Method</title> 
        
    </head>     
    <body>
        <h2> How To Read XML Data - 2 </h2>
        <div class='timeline'>
            <ul></ul>
        </div>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"> </script>
        <script src="raReadXMLByJquery-2.js" type="text/javascript"></script>       
        
    </body>
</html>

名为 raReadXMLByJQuery-2.xml 的 xml 文件:

< ?xml version="1.0" ?>
 
<statuses>

     <status id='555'>
        <id> 123</id>   
        <text>This is text 1</text>
        <link> http://google.com </link>
        <link> http://google.co.uk </link>
        <user>
            <name> Jack </name>
        </user>  
     </status>
     
     <status id='666'>
        <id> 456 </id>  
        <text>This is text 2</text>
        <link> http://google.com </link>
        <link> http://google.co.uk </link>
        <user>
            <name> Sara </name>
        </user>  
     </status>
      
</statuses>

名为 raReadXMLByJquery-2.js 的 javascript 文件:

$(document).ready( function() {  //11
    $.ajax({  //22
        url: 'raReadXMLByJQuery-2.xml',  
        //dataType: 'xml',  //this line is not working
        dataType: 'text',
        success: function (data){ //44
        
            $(data).find('status').each ( function() {  //55
                var status = $(this).find('text').text();
                var id = $(this).attr('id');
                var user = $(this).find('user name').text();
                var link = $(this).find('link').text();
                alert (link);
                
                $('.timeline ul').append ( //66
                    $('<li />', { //77
                        text: '(' + id + ') ' + status + ' - ' + user + ' - ' + link  //9999
    
                    })  //77
                
                );  //66
                
                    
            }); //55
        },  //44
        error: function(){ //33
                            
                            $('.timeline').text('There was an error baby!'); 
                         }  //33
    });  //22
    
});  //11
    

每个部分都在执行其功能,除了警报,它不输出任何内容,因此在代码行中由 //9999 标识的链接 elemet 的文本部分 为什么会这样?

这似乎很简单,但我没有找到 issu。

html jquery xml

评论

0赞 SKJ 8/7/2023
尝试在链接变量上添加 [0],例如下一个 link[0] 和 link[1]
0赞 ReA 8/7/2023
在 alert 中添加 [0] 会给出未定义的错误,而在 <li> 中不会给出任何错误。此外,我想获取所有链接元素

答:

2赞 Rory McCrossan 8/7/2023 #1

问题是因为是保留节点名称。将其更改为其他内容,例如 ,您的代码可以正常工作:<link />url

const data = `<?xml version="1.0"?><statuses><status id='555'><id> 123</id><text>This is text 1</text><url> http://google.com </url><url> http://google.co.uk </url><user><name> Jack </name></user></status><status id='666'><id> 456 </id><text>This is text 2</text><url> http://google.com </url><url> http://google.co.uk </url><user><name>Sara</name></user></status></statuses>`

$(data).find('status').each(function() {
  var status = $(this).find('text').text();
  var id = $(this).attr('id');
  var user = $(this).find('user name').text();
  var link = $(this).find('url').text();

  $('.timeline ul').append(
    $('<li />', {
      text: '(' + id + ') ' + status + ' - ' + user + ' - ' + link
    })
  );
});
<div class='timeline'>
  <ul></ul>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js">
</script>