Как прочитать XML - данные, возвращаемые из WCF datatable в javascript?
Привет,
Наш текущий сервис был разработан в WCF,и большая часть метода возвращается в виде комбинации DataTable и string.
Теперь им нужно разработать веб-базу на этом сервисе, но не нужно реструктурировать или модифицировать код, просто верните его в виде json для поддержки http-запроса.
Ниже приведен мой пример данных:
<DataTable xmlns="http://schemas.datacontract.org/2004/07/System.Data"> <xs:schema id="NewDataSet" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="TableName" msdata:UseCurrentLocale="true"><xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element name="TableName"><xs:complexType><xs:sequence><xs:element name="TraID" type="xs:int" minOccurs="0"/><xs:element name="TraDate" type="xs:dateTime" minOccurs="0"/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema> <diffgr:diffgram xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <DocumentElement xmlns=""> <TableName diffgr:id="TableName1" msdata:rowOrder="0"> <TraID>16001</TraID> <TraDate>2016-07-30T00:00:00+07:00</TraDate> </TableName> <TableName diffgr:id="TableName2" msdata:rowOrder="1"> <TraID>16002</TraID> <TraDate>2016-07-29T00:00:00+07:00</TraDate> </TableName> </DocumentElement> </diffgr:diffgram> </DataTable>
Метод AngularJS $http:
$http({ url: api_url + "/GetTra?PassKey=" + passkey, method: "GET", headers: { 'Content-Type': 'application/json; charset=utf-8' }, dataType: 'json' }).then(function (r) { console.log(r.data.GetTraResult); }, function (e) { });
Итак, моя проблема заключается в том, как я могу получить выше xml-данные в виде массива или объекта для отображения в представлении?
Я пробовал что-то подобное, но он говорит, что получил неопределенное имя тега
var transaction = []; var tra = { }; function myFunction(xml) { var i; var xmlDoc = xml.responseXML; var data = xmlDoc.getElementsByTagName("TableName"); for (i = 0; i < data.length; i++) { var d = data[i]; tra.TraID = d[i].getElementsByTagName("TraID")[0].childNodes[0].nodeValue; tra.TraDate = d[i].getElementsByTagName("TraDate")[0].childNodes[0].nodeValue; transaction.push(tra); } }
Заранее благодарю вас за помощь.
Что я уже пробовал:
Я пытаюсь использовать какую-то стандартную xml-функцию от google, но она не работает в этом формате xml-данных, поэтому, пожалуйста, помогите мне.