Reputation: 83
I have done an ajax call to a webpage that contains xml. It returns the webpage as xml, how can I return it so it is more readable like json(convert it to JSON). I have looked into accepts
headers but they don't seem to work. Here is my code:
var jqXHR = jQuery.ajax({
url: NBSBranchSiteContextURL ,
accepts:{json:'application/json'},
async:false });
alert(jqXHR.responseText);
The xml is :
<?xml version="1.0" encoding="utf-8" ?>
- <d:query xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:type="Microsoft.Office.Server.Search.REST.SearchResult">
<d:ElapsedTime m:type="Edm.Int32">62</d:ElapsedTime>
- <d:PrimaryQueryResult m:type="Microsoft.Office.Server.Search.REST.QueryResult">
<d:CustomResults m:type="Collection(Microsoft.Office.Server.Search.REST.CustomResult)" />
<d:QueryId>d6b8310d-58a6-49e0-bb0e-e9e10ca9de98</d:QueryId>
<d:QueryRuleId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:QueryRuleId>
<d:RefinementResults m:null="true" />
- <d:RelevantResults m:type="Microsoft.Office.Server.Search.REST.RelevantResults">
<d:GroupTemplateId m:null="true" />
<d:ItemTemplateId m:null="true" />
- <d:Properties>
- <d:element m:type="SP.KeyValue">
<d:Key>GenerationId</d:Key>
<d:Value>9223372036854775806</d:Value>
<d:ValueType>Edm.Int64</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ExecutionTimeMs</d:Key>
<d:Value>15</d:Value>
<d:ValueType>Edm.Int32</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>QueryModification</d:Key>
<d:Value>CostCentreBranchPrefix:JH123 ContentClass=urn:content-class:SPSPeople</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>RenderTemplateId</d:Key>
<d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Group_Default.js</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>StartRecord</d:Key>
<d:Value>0</d:Value>
<d:ValueType>Edm.Int32</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsLastBlockInSubstrate</d:Key>
<d:Value>true</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsFirstBlockInSubstrate</d:Key>
<d:Value>false</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsFirstPinnedResultBlock</d:Key>
<d:Value>false</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsLastPinnedResultBlock</d:Key>
<d:Value>false</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsFirstRankedResultBlock</d:Key>
<d:Value>true</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>IsLastRankedResultBlock</d:Key>
<d:Value>true</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
</d:Properties>
<d:ResultTitle m:null="true" />
<d:ResultTitleUrl m:null="true" />
<d:RowCount m:type="Edm.Int32">2</d:RowCount>
- <d:Table m:type="SP.SimpleDataTable">
- <d:Rows>
- <d:element m:type="SP.SimpleDataRow">
- <d:Cells>
- <d:element m:type="SP.KeyValue">
<d:Key>Rank</d:Key>
<d:Value>6.42380905151367</d:Value>
<d:ValueType>Edm.Double</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>DocId</d:Key>
<d:Value>11</d:Value>
<d:ValueType>Edm.Int64</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>PreferredName</d:Key>
<d:Value>Dave</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>JobTitle</d:Key>
<d:Value>man</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>EmailAddress</d:Key>
<d:Value>daveH@</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>PartitionId</d:Key>
<d:Value>0c37852b-34d0-418e-91c6-2ac25af4be5b</d:Value>
<d:ValueType>Edm.Guid</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>UrlZone</d:Key>
<d:Value>0</d:Value>
<d:ValueType>Edm.Int32</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>AAMEnabledManagedProperties</d:Key>
<d:Value>AttachmentURI;deeplinks;DefaultEncodingURL;ExternalMediaURL;HierarchyUrl;OrgParentUrls;OrgUrls;OriginalPath;ParentLink;Path;PictureThumbnailURL;PictureURL;PublishingImage;recommendedfor;ServerRedirectedEmbedURL;ServerRedirectedPreviewURL;ServerRedirectedURL;SiteLogo;SitePath;SPSiteURL;UserEncodingURL</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>EditProfileUrl</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileViewsLastMonth</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileViewsLastWeek</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileQueriesFoundYou</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>RenderTemplateId</d:Key>
<d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
</d:Cells>
</d:element>
- <d:element m:type="SP.SimpleDataRow">
- <d:Cells>
- <d:element m:type="SP.KeyValue">
<d:Key>Rank</d:Key>
<d:Value>6.42380905151367</d:Value>
<d:ValueType>Edm.Double</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>DocId</d:Key>
<d:Value>13</d:Value>
<d:ValueType>Edm.Int64</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>PreferredName</d:Key>
<d:Value>Asad</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>JobTitle</d:Key>
<d:Value>Software</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>EmailAddress</d:Key>
<d:Value>asadr@</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>PartitionId</d:Key>
<d:Value>0c37852b-34d0-418e-91c6-2ac25af4be5b</d:Value>
<d:ValueType>Edm.Guid</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>UrlZone</d:Key>
<d:Value>0</d:Value>
<d:ValueType>Edm.Int32</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>AAMEnabledManagedProperties</d:Key>
<d:Value>AttachmentURI;deeplinks;DefaultEncodingURL;ExternalMediaURL;HierarchyUrl;OrgParentUrls;OrgUrls;OriginalPath;ParentLink;Path;PictureThumbnailURL;PictureURL;PublishingImage;recommendedfor;ServerRedirectedEmbedURL;ServerRedirectedPreviewURL;ServerRedirectedURL;SiteLogo;SitePath;SPSiteURL;UserEncodingURL</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>EditProfileUrl</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileViewsLastMonth</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileViewsLastWeek</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>ProfileQueriesFoundYou</d:Key>
<d:Value m:null="true" />
<d:ValueType>Null</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>RenderTemplateId</d:Key>
<d:Value>~sitecollection/_catalogs/masterpage/Display Templates/Search/Item_Default.js</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
</d:Cells>
</d:element>
</d:Rows>
</d:Table>
<d:TotalRows m:type="Edm.Int32">2</d:TotalRows>
<d:TotalRowsIncludingDuplicates m:type="Edm.Int32">2</d:TotalRowsIncludingDuplicates>
</d:RelevantResults>
<d:SpecialTermResults m:null="true" />
</d:PrimaryQueryResult>
- <d:Properties>
- <d:element m:type="SP.KeyValue">
<d:Key>RowLimit</d:Key>
<d:Value>100</d:Value>
<d:ValueType>Edm.Int32</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>SourceId</d:Key>
<d:Value>b09a7990-05ea-4af9-81ef-edfab16c4e31</d:Value>
<d:ValueType>Edm.Guid</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>EnableInterleaving</d:Key>
<d:Value>true</d:Value>
<d:ValueType>Edm.Boolean</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>piPageImpression</d:Key>
<d:Value>23924_1185_2057</d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
- <d:element m:type="SP.KeyValue">
<d:Key>SerializedQuery</d:Key>
<d:Value><Query Culture="en-GB" EnableStemming="True" EnablePhonetic="False" EnableNicknames="False" IgnoreAllNoiseQuery="True" SummaryLength="180" MaxSnippetLength="180" DesiredSnippetLength="90" KeywordInclusion="0" QueryText="CostCentreBranchPrefix:JH123" QueryTemplate="" TrimDuplicates="True" Site="09325ab3-1fbf-4798-8c94-9b7547bfae90" Web="b21f0568-898a-4fd0-b911-916c1491ba15" KeywordType="True" HiddenConstraints="" /></d:Value>
<d:ValueType>Edm.String</d:ValueType>
</d:element>
</d:Properties>
<d:SecondaryQueryResults m:type="Collection(Microsoft.Office.Server.Search.REST.QueryResult)" />
<d:SpellingSuggestion m:null="true" />
<d:TriggeredRules m:type="Collection(Edm.Guid)" />
</d:query>
Where I want it to return, whether the <d:Key>
PreferredName,JobTitle and Emails <d:Value>
so in this case Dave, Asad for name. man and software for jobtitle and daveH@ and asadr@ for email. There could be more values in the future
Upvotes: 0
Views: 548
Reputation: 115920
You can use dataType: "xml"
to specify that the response is XML, and then read the data
argument in the success
callback or use responseXML
property. The result can be traversed using a DOM API, identical to the API used to traverse HTML documents. This means that you can use jQuery to abstract the DOM away, just as it does with HTML DOM selection and traversal.
Suppose your XML is
<library>
<book title="The Sun Also Rises" author="Hemingway" />
<book title="The Hunger Games" author="Collins" />
<magazine title="Time" issue="578" />
<magazine title="Tacos Monthly" issue="3" />
</library>
You can fetch it and inspect it with jQuery:
var jqXHR = jQuery.ajax({
url: NBSBranchSiteContextURL,
dataType: "xml",
success: function(data) {
$xml = $(data);
// get title attribute of the first book, "The Sun Also Rises"
$xml.find("book:eq(0)").attr("title");
// get author attribute of the book entitled "The Hunger Games"
$xml.find("book[title='The Hunger Games']").attr("author");
$xml.find("magazine").each(function(idx, mag) {
var $m = $(mag);
alert($m.attr("title") + " " + $m.attr("issue"));
});
}
});
Upvotes: 1
Reputation: 49803
You can't force a server to provide the page as JSON (or anything else, for that matter) if it isn't set up to do so. Thus, as some comments have suggested, if you want it in JSON, you'll have to convert what you get back, although you might not need to (as you haven't said what you want to do with the data).
Upvotes: 1