【问题标题】:JQuery Selector in XMLXML 中的 JQuery 选择器
【发布时间】:2012-06-09 14:39:48
【问题描述】:

我正在尝试从 XSD 文档中获取一组元素。我已经下载并且正在使用最新版本的 jQuery (1.7.2)。引用的xsd是http://www.w3.org/2001/XMLSchema.xsd的本地副本,我使用的代码如下:

var xml;
$(function(){
    $.ajax({
        type:"GET",
        url:"http://www.w3.org/2001/XMLSchema.xsd",//"xml/XMLSchema.xsd",
        dataType: 'xml',
        success:function(result){
            xml = $(result);
        }
    });
});

这使我能够按预期将 xsd 加载到“xml”变量中,但是当我去查询它时,我最终会得到一些令人困惑的结果。使用:

$('complexType[name=simpleType]', xml).attr("name")
$('complexType[name="simpleType"]', xml).attr("name")

return "undefined" 但是开头、结尾和开头和结尾都返回正确的结果:

$('complexType[name^="simpleType"]', xml).attr("name")
$('complexType[name$="simpleType"]', xml).attr("name")
$('complexType[name$="simpleType"][name^="simpleType"]', xml).attr("name")

这就是名称“simpleType”。 = 不起作用有什么原因吗?

提前致谢

【问题讨论】:

    标签: jquery xml jquery-selectors


    【解决方案1】:

    我认为您对命名空间的使用有疑问。你可以尝试使用

    $('xs\\:complexType[name=simpleType]', xml).attr("name")
    

    (请参阅元字符转义here)而不是

    $('complexType[name=simpleType]', xml).attr("name")
    

    【讨论】:

    • 这确实如你所说,谢谢!当我不包含命名空间前缀并且使用 ^=、$= 或 *= 来匹配属性值而不是仅使用 = 时,为什么节点正确匹配的原因有什么?
    • @Meberem:不客气!在我使用 ^=、$= 或 *= 进行所有测试的测试中,获得 undefined 值。我可以想象,您使用哪个网络浏览器和哪个版本可能很重要。一般来说,jQuery 是为解析 DOM 而不是 XML 而设计的。用 jQuery 解析 XML 文档并不是最好的主意。使用getElementsByTagNameNS:result.documentElement.getElementsByTagNameNS("http://www.w3.org/2001/XMLSchema", "simpleType")然后在循环中测试所有选中元素的属性可以得到更好的结果。
    • 感谢您的跟进!我认为使用 jQuery 解析 XML 而不是纯 DOM 可能是雄心勃勃的,我会看看你的建议,再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多