转换格式不良的XML以便在数组中使用

时间:2012-08-14 18:12:26

标签: jquery xml arrays iteration

我需要遍历本文中示例XML中的所有属性(无论名称如何),并创建一个2D"阵列数组"使用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似乎是'#34;形成不良&#34;所以我无法迭代其属性以便在2D数组中使用。有another post here on StackOverflow给了我一些希望。似乎因为XML格式不正确,所以它不起作用。

如果有更好的方法来处理这些数据,这样我就可以将这些属性的所有加载到一个数组数组中(每个子节点有一个数组)我很想知道它。我对此非常环保,我希望能找到一些简单的东西,将来可以用于各种CAML查询。

------------------------------------- 编辑&amp;新信息--------------------------------

在发布新问题之前,我先为此问题添加一些信息。

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

我的新相关问题:让我们说我想得到所有&#34; Quantity2&#34;来自此SOAP信封的条目。

使用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(){

任何想法都将不胜感激!

1 个答案:

答案 0 :(得分: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);
});

FIDDLE