2012-06-09 31 views
0

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

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") 

回报“不确定”,然而与启动,与结束,开始和返回正确的结果结束:

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

哪个是名“简单类型”。 =有没有理由为什么=不工作?

在此先感谢

回答

1

我认为你有问题,命名空间的使用。你可以尝试使用

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

(见约here的元字符转义),而不是

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

这不工作,因为我告诉你们,谢谢!当我没有包含命名空间前缀,并且当^ =,$ =或* =用于匹配属性值而不是仅仅匹配=时,是否有任何推理说明为什么节点匹配正确? – Meberem

+1

@Meberem:不客气!在我用^ =,$ =或* =进行所有测试的测试中得到'undefined'值。我可以想象,使用哪种浏览器和哪个版本可能很重要。通常jQuery被设计用于解析DOM而不是XML。用jQuery解析XML文档不是最好的主意。使用'getElementsByTagNameNS':'result.documentElement.getElementsByTagNameNS(“http://www.w3.org/2001/XMLSchema”,“simpleType”)'然后测试循环中所有选定元素的属性可以得到更好的结果。 – Oleg

+0

感谢您的跟进!我认为解析XML而不是纯粹的DOM与jQuery可能是雄心勃勃的,我会看看你有什么建议,再次感谢 – Meberem