user3956534
user3956534

Reputation: 83

ajax call on a xml webpage to JSON

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

Answers (2)

apsillers
apsillers

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

Scott Hunter
Scott Hunter

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

Related Questions