【问题标题】:Parsing complex XML with jQuery使用 jQuery 解析复杂的 XML
【发布时间】:2012-06-26 14:05:12
【问题描述】:

我正在尝试使用以下 jQuery 解析以下 XML。页面上不显示任何内容。我知道它正在获取文件。我在网上看过,虽然有很多用 jquery 解析 xml 的例子,但没有一个看起来像这种格式。

XML:

<?xml version="1.0" encoding="utf-8"?>
<wcm:root xmlns:wcm="http://www.stellant.com/wcm-data/ns/8.0.0" version="8.0.0.0">

    <wcm:element name="title"></wcm:element>
    <wcm:element name="wide_image">&lt;img src=&#39;[!--$wcmUrl&amp;amp;x28;&#39;resource&amp;#39;,&amp;#39;CMS3_130980&amp;#39;&amp;amp;x29;--]&amp;#39;/&gt;</wcm:element>
    <wcm:element name="image">&lt;img src="[!--$wcmUrl('resource','CMS3_132821')--]"/&gt;</wcm:element>
    <wcm:element name="body">&lt;p&gt;
        Paragraph of text goes here.&lt;br /&gt;&lt;br /&gt;
        Paragraph of text goes here.&lt;br /&gt;&lt;br /&gt;
        Paragraph of text goes here.&lt;br /&gt;&lt;br /&gt;
        Paragraph of text goes here.&lt;br /&gt;&lt;br /&gt;
        Paragraph of text goes here.&lt;/p&gt;
</wcm:element>
</wcm:root>

HTML 和 jQuery:

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

<script type="text/javascript">

$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "link_to_my_file.xml",
        dataType: "xml",
        success: parseXml
    });
});

function parseXml(xml){
    $(xml).find("wcm\\3a root").each(function(){
    alert("Test");
        $("#output").append($(this).attr("title") + "<br />");
        $("#output").append($(this).attr("wide_image") + "<br />");
        $("#output").append($(this).attr("image") + "<br />");
        $("#output").append($(this).attr("body") + "<br />");
        });
     };

</script>

<div id="output"></div>

</html>

【问题讨论】:

  • parseXml 函数未终止...你需要}。使用缩进会让你更容易看到这些问题。
  • @Esailija 感谢您指出这一点。我已经更新了上面的代码,现在没有控制台错误了。

标签: jquery xml parsing


【解决方案1】:

您必须在选择器中 escape ::http://mothereff.in/css-escapes#1wcm%3Aroot

所以,而不是:

$(xml).find("wcm:root")

用途:

$(xml).find("wcm\\3a root")

另外,您的代码 sn-p 是无效的 JavaScript(在 parseXml 函数声明之后缺少 })。检查您的错误控制台。

【讨论】:

  • 谢谢,我已经更新了上面的 parseXml 函数。还是行不通。不过,我现在的错误控制台中没有出现任何错误。
  • @Esailija 是的,但我更倾向于使用 \3a ,因为它适用于 IE \: 则不行。始终使用\3a 更安全。详情请见mathiasbynens.be/notes/css-escapes。
  • 感谢你们的帮助。然而还是有问题。我已经更新了上面的 parseXml 函数以包含一个警报。它永远不会走那么远。如果我将警报移动到 .find 它弹出之前,那么我知道该函数正在被调用。我的查找中是否存在格式错误?
  • @RichCoy 检查您的错误控制台。如果有格式错误,您会在那里看到。
  • 发现最新的 jQuery 存在名称空间问题,因此目前无法使用 jQuery 解决此问题。
猜你喜欢
  • 1970-01-01
  • 2013-01-17
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多