2015-02-23 2 views
1

Я хотел бы получить XML из URL-адреса и проанализировать его с помощью JQuery. Я работаю в предположении, что с AJAX нельзя получить доступ к другому домену без доступа к перекрестному домену. Поэтому я создал PHP код, чтобы вернуть его (я не понимаю, как это то, что мы имеем дело с в 2015 году, но, возможно, я просто тупой):Извлечение XML из URL и анализа с помощью JQuery

header('Content-Type:xml'); 
$xmlDoc = new DOMDocument(); 
$xmlDoc->load("http://www.ncbi.nlm.nih.gov/pubmed/22375842?report=xml"); 
$xmlstring = $xmlDoc->saveXML($xmlDoc->documentElement); 
print $xmlstring; 

Теперь я использую функция AJAX для вызова этих данных:

$.ajax({ 
    url: "loadXML.php", //+ searchString, 
    dataType: "xml", 
    type: "GET", 
    success: parseXml 
}); 

Наконец, вот моя функция ParseXML, которая была протестирована с локальными страницами XML и работает отлично. Этот код повторяется много раз:

function parseXml(xml){ 
    $(xml).find("Article").each(function() 
    { 
    $("#output").append($(this).attr("PubModel") + "<br />"); 
    $("#ArticleTitle").append(": " + $(this).find("ArticleTitle").text() + "<br />"); 
    }); 

    $(xml).find("Author").each(function() 
    { 
    $("#Author").append(": " + $(this).find("LastName").text()); 
    $("#Author").append(", " + $(this).find("ForeName").text()); 
    }); 
}; 

Ничего не происходит. Кто-то за любовь к Зевсу, пожалуйста, помогите мне ... и улегся, я, по-видимому, не понимаю, как сделать что-то довольно простое для начала. Я думал о сохранении данных на странице PHP в локальном файле на моем сервере, но не смог обработать «<» и «>». Я немного здесь потерялся.

+0

Добавить 'console.log (XML),' в ' parseXml' и опубликовать результат. – Hackerman

+0

Правильный способ настройки заголовка содержимого - 'header (« Content-Type: text/xml »)' – roeland

+0

добавил console.log (xml); в функции parseXml и ничего не изменилось. Также исправлен заголовок типа содержимого. – user2954658

ответ

0

Открытие URL-адреса в браузере Результирующий контент на самом деле не XML, а экранированный XML в теге <pre>.

Отрывок:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<pre> 
&lt;PubmedArticle&gt; 
    &lt;MedlineCitation Owner="NLM" Status="MEDLINE"&gt; 
     &lt;PMID Version="1"&gt;22375842&lt;/PMID&gt; 
     &lt;DateCreated&gt; 
     ... 

Для вывода контента в формате XML необходимо повторить текстовое содержимое элемента документа:

$xmlDoc = new DOMDocument(); 
$xmlDoc->load("http://www.ncbi.nlm.nih.gov/pubmed/22375842?report=xml"); 

header('Content-type: application/xml'); 
print $xmlDoc->documentElement->textContent; 
+0

СПАСИБО. Я МОГУ ПОЛУЧИТЬ ВАС. – user2954658

+0

P.S: Раньше результат выглядел как XML, поэтому я никогда не думал об этом. Теперь выход - это обычный текст. поэтому я понятия не имел, что была отформатирована правильно. Чёрный чувак. Он выглядит как обычный текст, но это потому, что HTML скрывает теги, которые я предполагаю. Если вы просматриваете страницу, вся информация есть. – user2954658

+0

Я хотел бы поблагодарить родителей ThW за его создание, а также за его существование. Я также хотел бы поблагодарить создателя SO. – user2954658

Смежные вопросы