【问题标题】:Unable to fetch children nodes from xml无法从 xml 获取子节点
【发布时间】:2017-09-22 06:34:07
【问题描述】:

我正在尝试从 xml 中获取子节点并对其进行迭代,但不知何故它不起作用。我的 xml 文档:

          <GetSalutationResponse xmlns="http://tempuri.org/">
             <GetSalutationResult xmlns:a="http://schemas.datacontract.org/2004/07/Trips_Service.DataClass" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:error i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/"/>
                <a:salutationslist>
                   <a:Salutations>
                      <a:SalutationID>Mr</a:SalutationID>
                      <a:SalutationName>Mr</a:SalutationName>
                   </a:Salutations>
                   <a:Salutations>
                      <a:SalutationID>Mrs</a:SalutationID>
                      <a:SalutationName>Mrs</a:SalutationName>
                   </a:Salutations>
                   <a:Salutations>
                      <a:SalutationID>Dr</a:SalutationID>
                      <a:SalutationName>Dr</a:SalutationName>
                   </a:Salutations>
                   <a:Salutations>
                      <a:SalutationID>Ms</a:SalutationID>
                      <a:SalutationName>Ms</a:SalutationName>
                   </a:Salutations>
                </a:salutationslist>
             </GetSalutationResult>
          </GetSalutationResponse>

我的 javscript 代码我用来获取子节点并对其进行迭代。

var result = xmldoc;          
          var v1 = $(result).find('GetSalutationResponse').find('GetSalutationResult');
            if ($(v1).find('error').length > 0 && $(v1).find('error').attr('i:nil') != 'true') {
                resp.error = new Error();
                resp.error.ErrorMessage = $(v1).find('error').find('ErrorMessage').text();
            }
            else {
                resp.salutationslist = new Array();
                $(v1).find('salutationslist').find('Salutations').each(function () {
                    var o1 = new Salutations();
                    o1.SalutationID = $(this).find('SalutationID').text();
                    o1.SalutationName = $(this).find('SalutationName').text();
                    resp.salutationslist[resp.salutationslist.length] = o1;
                });
            }

我调试了代码,发现它没有进入每个 jquery 中。

【问题讨论】:

    标签: javascript jquery xml find each


    【解决方案1】:

    在选择器中使用"a" 并转义":",另见Why can't jQuery 3 identify the '#' character in an attribute selector?

    var v1 = $(result).find('GetSalutationResponse').find('GetSalutationResult');
    if ($(v1).find('a\\:error').length > 0 && $(v1).find('a\\:error').attr('i:nil') != 'true') {
      resp.error = new Error();
      resp.error.ErrorMessage = $(v1).find('a\\:error').find('ErrorMessage').text();
    } else {
      resp.salutationslist = new Array();
      $(v1).find('salutationslist').find('a:\\Salutations').each(function() {
        var o1 = new Salutations();
        o1.SalutationID = $(this).find('a:\\SalutationID').text();
        o1.SalutationName = $(this).find('a:\\SalutationName').text();
        resp.salutationslist[resp.salutationslist.length] = o1;
      });
    }
    

    var xmldoc = `<GetSalutationResponse xmlns="http://tempuri.org/">
      <GetSalutationResult xmlns:a="http://schemas.datacontract.org/2004/07/Trips_Service.DataClass" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:error i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/" />
        <a:salutationslist>
          <a:Salutations>
            <a:SalutationID>Mr</a:SalutationID>
            <a:SalutationName>Mr</a:SalutationName>
          </a:Salutations>
          <a:Salutations>
            <a:SalutationID>Mrs</a:SalutationID>
            <a:SalutationName>Mrs</a:SalutationName>
          </a:Salutations>
          <a:Salutations>
            <a:SalutationID>Dr</a:SalutationID>
            <a:SalutationName>Dr</a:SalutationName>
          </a:Salutations>
          <a:Salutations>
            <a:SalutationID>Ms</a:SalutationID>
            <a:SalutationName>Ms</a:SalutationName>
          </a:Salutations>
        </a:salutationslist>
      </GetSalutationResult>
    </GetSalutationResponse>`;
    
    var result = xmldoc;
    
    console.log($(result).find("a\\:salutationslist"));
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
    </script>

    【讨论】:

    • 我更改了 javascript 代码和 jquery 脚本,但没有分别输入 jquery
    • 我是否需要将 xml 文档更改为字符串。虽然几天前它正在工作。
    • 代码的问题是传递给.find() 的选择器与XML document 中以&lt;a:&gt; 开头的元素不匹配。 xmldoc 是 XML #document 吗?
    • @VinayDahiwale 同样适用。请参阅更新后的帖子。所有.find("error") 都应该是.find("a\\:error")
    • 是的,它起作用了,但 .find("error") 首先起作用。我也在使用本地存储的 jquery v1.9.1,即在项目中。所以理想情况下不应该有任何变化
    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多