将链接添加到xml标记并使用jquery进行解析

时间:2011-03-18 14:51:59

标签: xml parsing jquery xml-parsing

我可以用jquery解析xml。现在我想要解析的文本是超链接而不是简单的文本。以下是我写的内容。

 $(xml).find("customers")
     .each(function(){
          $("#guys").append("<div class="mybox"><a href="+$(this).find('customer_link').text()+"target="_blank">"+$(this).find('customer_company').text()"</a></div>");                                                                                      

});

这是XML

    

    <customer_company><![CDATA[Google<br>]]></customer_company>
    <customer_link>http://www.google.com</customer_link>

</myguys>

<myguys>

    <customer_company><![CDATA[EMC<br>]]></customer_company>
    <customer_link>http://www.emc.com</customer_link>

</myguys>
</info>

我知道逻辑没有错,我认为这只是a标签的语法错误。有人可以告诉我我在哪里犯了一个错误并指出了一个很好的教程

2 个答案:

答案 0 :(得分:1)

您正在混合报价样式。单引号(')字符串可以包含未转义的双引号("),反之亦然。在双引号字符串中使用未转义的双引号会破坏您的代码。

$("#guys").append("<div class="mybox"><a href="+$(this).find('customer_link')
ss^   se^       ss^         se^   ss^       se^            ss^           se^   

.text()+"target="_blank">"+$(this).find('customer_company').text()"</a></div>"); 
      ss^     se^    ss^e^            ss^              se^      ss^        se^ 

ss == string start,
se == string end 

您可以看到这是如何创建随机未定义的引用,如mybox,但不会构建您想要的字符串。 试试这个:

$("#guys").append("<div class='mybox'><a href=" + 
    $(this).find("customer_link").text() +
    "' target='_blank'>" + 
    $(this).find("customer_company").text() + 
    "</a></div>");  

或者,您可以使用jQuery构建所有元素,并完全避免在字符串中嵌入带引号的属性:

 $("#guys").append($("<div />")
                      .addClass("mybox")
                      .append($('<a/>', {  
                          href: $(this).find("customer_link").text(),  
                          target: "_blank",  
                          text: $(this).find("customer_company").text()  
                      })));

xml中的CDATA会导致jQuery问题,因为它正在解析xml,就像它的html一样,而不是根据xml规范。如果您无法从CDATA元素中删除<br>customer_company,则最好使用jParse这样的插件解析xml。

答案 1 :(得分:0)

查看代码片段:

$("#guys").append("<div class="mybox">.......

当您可能不打算关闭标签时,

试试这个:

$("#guys").append("<div class='mybox'>.......

但是,你需要仔细考虑一下,因为你的字符串后面会有一些引号。