[jQuery] XML Parsing, am I doing it wrong?
I have an XML data structure being returned from my server on an AJAX
call (excerpt here):
<SOAP-ENV:Envelope>
-
<SOAP-ENV:Body>
-
<idc:service IdcService="CHECKIN_UNIVERSAL">
-
<idc:document dDocType="Reports" dUser="jim" dIsCheckedOut="0"
dRevisionID="1" dCreateDate="10/12/09 1:12 PM"
dDocName="AGR_REPT_FINAL" dDocAuthor="jim" dOutDate=""
dCheckoutUser="" dPublishState="" dInDate="10/12/09 1:12 PM"
dReleaseState="N" dRevClassID="4721" dDocTitle="AGR FINAL REPORT"
dProcessingState="Y" dRevLabel="2" dID="9151">
<idc:field name="StatusMessage">
Content item 'AGR_REPT_FINAL' was not successfully checked in. The
content item is not currently checked out.
</idc:field>
<idc:field
name="StatusReason">csIsNotCheckedOutError:DARS_REPT_COM_AGR</
idc:field>
<idc:field name="StatusCode">-1</idc:field>
</idc:document>
</idc:service>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
I have eliminated a lot of extraneous '<idc:field name="foo">bar</
idc:field>' entries in my post, otherwise it is the server output. The
three fields I need are the ones I've kept. I am trying to read them
via:
success: function(data)
{
if(!out.innerHTML || typeof(out.innerHTML) != "string")
{
out.innerHTML = "";
}
var jqxml = $( data );
//0 on success, else failure
var jqStatusCode = jqxml.find("idc:field [name =
'StatusCode']");
var jqStatusReason = jqxml.find("idc:field [name =
'StatusReason']");
var jqStatusMessage = jqxml.find("idc:field [name =
'StatusMessage']");
//print the type of each, followed by the text in parenthesis
out.innerHTML += "<HR><SPAN CLASS=\"statusnote\">Response Text("
+ data + "):</SPAN><BR>";
out.innerHTML += "<TABLE><TR><TD>" + jqStatusCode + ":(" +
jqStatusCode.text() + ")</TD><TD>" +
jqStatusReason + ":(" +
jqStatusReason.text() + ")</TD><TD>" +
jqStatusMessage + ":(" +
jqStatusMessage.text() + ")</TD></TR></TABLE>";
out.innerHTML += "<HR SIZE=2>";
//Nothing prints out for this section
jqxml.find("idc:field").each(function(Index)
{
out.innerHTML+="idc:field Index: " + Index + ": " + $( this )
[ 0 ].nodeName ;
});
out.innerHTML += "<HR SIZE=2>";
//this section prints out a lot of stuff, however if I print out
tmp[o], I end up getting redirected to my server,
//with a parameter string of "about:blank"
tmp = jqStatusCode;
out.innerHTML+="Looking at: " + tmp + "<BR>";
for(o in tmp)
{
out.innerHTML+="<BR><B>data." + o + "</B>: (" + typeof(tmp[o]) + "):
";
}
}
};
// bind form using 'ajaxForm'
$('#ReportUploadForm').ajaxForm(options);
});
Unfortunately, the text() on each value of interest returns an empty
string. I suspect my problem is either (a) the XML is confusing the
interpreter (wouldn't that throw an error?) or a more likely (b) I'm
doing something wrong. However, looking through the documentation and
exploring the values returned, I can't figure out what it is.
Any suggestions?
Thanks,
-Jim