1

我需要遍历这篇文章中示例 XML 中的所有属性(无论名称如何),并使用 JQuery 创建一个二维“数组数组”。

我正在使用 Microsoft 的 CAML 查询语言从 SharePoint 列表中返回属性。它作为加载到对象中的 XML 返回。这是返回的 XML:

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/"><GetListItemsResult><listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
                <rs:data ItemCount="3">
                    <z:row ows_Attachments="0" ows_LinkTitle="Apple" ows_Color="Red" ows_Quantity="3.00000000000000" ows_Quantity2="5.00000000000000" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Apple" ows_ID="1" ows_UniqueId="1;#{FEDE3004-A0F4-421F-A76B-5BD51003B11C}" ows_owshiddenversion="2" ows_FSObjType="1;#0" ows_Created_x0020_Date="1;#2012-08-01 19:24:08" ows_Created="2012-08-01 19:24:08" ows_FileLeafRef="1;#1_.000" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-08-05 13:59:06" ows_FileRef="1;#Sandbox/bitest/Lists/Produce/1_.000"/>
                    <z:row ows_Attachments="0" ows_LinkTitle="Orange" ows_Color="Orange" ows_Quantity="5.00000000000000" ows_Quantity2="3.00000000000000" ows_MetaInfo="2;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Orange" ows_ID="2" ows_UniqueId="2;#{1E40887F-87BF-4029-93A3-A1096DF1D1A7}" ows_owshiddenversion="2" ows_FSObjType="2;#0" ows_Created_x0020_Date="2;#2012-08-01 19:24:42" ows_Created="2012-08-01 19:24:42" ows_FileLeafRef="2;#2_.000" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-08-05 13:59:08" ows_FileRef="2;#Sandbox/bitest/Lists/Produce/2_.000"/>
                    <z:row ows_Attachments="0" ows_LinkTitle="Corn" ows_Color="Yellow" ows_Quantity="9.00000000000000" ows_Quantity2="19.0000000000000" ows_MetaInfo="3;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Corn" ows_ID="3" ows_UniqueId="3;#{3873272A-61AA-49C0-B5D2-A228388ADE27}" ows_owshiddenversion="5" ows_FSObjType="3;#0" ows_Created_x0020_Date="3;#2012-08-01 19:24:57" ows_Created="2012-08-01 19:24:57" ows_FileLeafRef="3;#3_.000" ows_PermMask="0x7fffffffffffffff" ows_Modified="2012-08-08 13:58:38" ows_FileRef="3;#Sandbox/bitest/Lists/Produce/3_.000"/>
                </rs:data>
            </listitems></GetListItemsResult></GetListItemsResponse></soap:Body></soap:Envelope>

此 xml 似乎“格式不正确”,因此我无法遍历其属性以在 2D 数组中使用。StackOverflow 上的另一篇文章给了我一些希望。似乎由于 XML 格式不正确,因此无法正常工作。

如果有更好的方法来处理这些数据,可以让我将所有这些属性加载到一个数组数组中(每个子节点一个数组),我很想听听。我对此很陌生,我希望能找到一些简单的东西,可以在未来与各种 CAML 查询一起使用。

------------------------------------- 编辑和新信息---------- ----------------------

在发布新问题之前,让我为这个问题添加一些信息。

我已经放弃了从所有列出的属性动态创建二维数组;我和另一个人无法让它工作。看来我每次只需要创建一个自定义数组。

我新的相关问题:假设我想从这个 SOAP 信封中获取所有“Quantity2”条目。

使用 JavaScript / JQuery 遍历每个行条目并为每行返回一个值的最佳方法是什么?我可以给出我正在使用的当前代码示例;它可以工作,但我担心它可能会被 XML 中的数据值混淆:

$(xData.responseXML).find("z\\:row").each(function() {
    quantityOneArray[i] = parseFloat($(this).attr("ows_Quantity"));
    quantityTwoArray[i] = parseFloat($(this).attr("ows_Quantity2"));
    i++
});

我更喜欢使用 DOM 元素,例如这个例子(这是无效的):

for each $(this).childnode(function(){

任何想法将不胜感激!

4

1 回答 1

0

不太确定您在追求什么,但请尝试以下操作:

//get the parent XML node
var elems = document.getElementsByTagName('soap:Envelope')​;

//turn the collection into an aray
var arrayElem = $(elems).toArray();

//create an array with each node
var arr = [];
$.each($('*', elems), function(i,e) {
    arr.push(e);
});

小提琴

于 2012-08-14T18:38:10.383 回答