在“跨记录”中查找XML属性的最大值

Find the Max Value for an XML Attribute, Across Records

本文关键字:XML 查找 属性 最大值 记录 跨记录      更新时间:2023-09-26

使用JQuery&SPServices,我收到的XML类似于以下内容:

<?xml version="1.0"?>
<soap:Envelope xmlns: . . .> <soap:Body>
<GetListItemsResponse xmlns=" ... ">
 <GetListItemsResult>
  <listitems xmlns:s=" ... >
   <rs:data ItemCount="4">
      <z:row  ows_CtID="5"  ows_ID="1"  ows_Ct="GR"   />
      <z:row  ows_CtID="9"  ows_ID="4"  ows_Ct="PC"   />
      <z:row  ows_CtID="2"  ows_ID="5"  ows_Ct="G"    />
      <z:row  ows_CtID="3"  ows_ID="7"  ows_Ct="O55"  />
   </rs:data>
  </listitems>
 </GetListItemsResult>
</GetListItemsResponse>
</soap:Body></soap:Envelope>

(当然,我得到了更多;为了简单地展示这个概念,这个已经被缩减了。)

您将注意到,排序是根据ows_ID进行的,并且ows_IDows_CtID的值都有间隙。

我想得到min&ows_CtID;的最大值我想要"2"&换句话说就是"9,"。

使用JavaScript、JQuery(可能还有SPServices),我如何获得XML中特定属性的最小值和最大值(本例中为ows_CtID,)?

您需要遍历所有z:row,并为min和max保留一个变量,只有在找到较大值或较小值时才更新它们。。。例如,将以下内容放入SPServices的completefunc函数中:

var min = null,
    max = null;
$(xData.responseXML).SPFilterNode("z:row").each(function() {
    var $this = $(this),
        val   = parseInt( $this.attr("ows_CtID") );
    if (min === null) {
        min = max = val;
    }
    if (val < min) {
        min = val;
    }
    if (val > max) {
        max = val;
    }
});
alert("Min: " + min + " | Max: " + max);

如果您的字段(在本例中为ows_CtID)不是整数,则将上面的内容更改为不使用"parseInt"。。。如果它是一个带小数的数字,请改为parseFloat。

保罗。