使用javascript解析restful webservice xml响应

时间:2011-09-01 13:20:50

标签: jquery parsing xpath namespaces

我想解析以下xml,这是来自restful webservice的响应:

<ns2:list xmlns="urn:foo1:foo" xmlns:ns2="foo2:foo">

   <entityData>
      <namedAttributes>...</namedAttributes>
      <dynamicEnums>...</dynamicEnums>
   </entityData>

   <ns2:employees>
      <ns2:user id="test">
          <ns2:name genderTitle="0" firstName="Rock" surName="Solid"></ns2:name>
      </ns2:user >
   </ns2:employees>
</ns2:list>

如果我尝试使用xpath-expression,我只能将[object Object]作为alert:

function parse(xml){
   var test= $(this).find('/ns2:list/ns2:employees/ns2:user[85]/ns2:name');
   alert(test);
};

添加.text() - 方法如:   var test = $(this).find('/ ns2:list / ns2:employees / ns2:user [85] / ns2:name')。text();只会使警报为空...

xpath表达式不应该是错误的,我使用Firebug来获取表达式,也许在这个例子中有些输入错误。

任何人都知道什么是错的? 或者反过来说:如何提醒firstName这样的字段?

3 个答案:

答案 0 :(得分:1)

您可能需要在查询中为名称添加命名空间。

所以你需要这样的东西:

/*[local-name()='list' and namespace-uri()='urn:foo1:foo']

答案 1 :(得分:1)

不是/ list / employees / user [@ id ='test'] / name / @ firstName有效吗?

答案 2 :(得分:0)

您可能需要查看.parseXML来解析xml这里是一个很好的SO解决方案,用命名空间jQuery XML parsing with namespaces解析xml

这里也是一个很好的链接Namespace Selectors for jQuery

<强>溶液

    xmlDoc = $.parseXML(xml),
    $xml = $(xmlDoc),
    $name = $xml.find( "ns2\\:name" ).attr("surName");

   alert($name);

这里是小提琴http://jsfiddle.net/Jbnev/