Парсинг xml средствами JS (jQuery)

stik.name
На сайте с 21.03.2010
Offline
80
9806

День добрый, есть вариант парсера, он работает, но не так как хотелось бы.

Вот файлы...

index.html

<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "GET",
url: "xml_data.xml",
dataType: "xml",
success: xmlParser
});
});

function xmlParser(xml) {
$(xml).find("options").each(function () {
var page_url = $(this).find('page_url').text();
alert(page_url);
});
}
</script>
</body>
</html>

xml_data.xml

<?xml version="1.0" ?>
<options>
<page_url>http://site.com/123123/123/1/</page_url>
<param1>&fs=</param1>
<param2>&ms=</param2>
</options>

Если из xml_data.xml убрать строки:


<param1>&fs=</param1>
<param2>&ms=</param2>

То всё работает, но убрать их я не могу. Потому как парсингу подвергается сторонний ресурс. А так же парсить нужно именно средствами JavaScript, php тут не подойдёт т.к. нужен айпи клиента.

Вопросы:

1. Может быть как-то при загрузке xml убирать из него эти две строки, а потом уже искать нужную строчку? Потому что я так понимаю что из-за этих параметров &fs= и &ms= файл не верно читается и функция find() не работает.

2. Может есть вариант игнорирования ошибок в xml файле, что бы функция find() нормально выводила результат.

Заранее спасибо всем кто попробует помочь.

http://stik.name (http://stik.name) - Think different
D
На сайте с 14.01.2007
Offline
153
#1

1. http://www.w3schools.com/jsref/jsref_replace.asp

2. кто вам сказал, что через PHP нельзя передать IP?

siv1987
На сайте с 02.04.2009
Offline
427
#2


$.ajax({
url: 'data.xml',
type: 'GET',
dataType: 'html',
success: function(d){
alert(d);
$(d).find('page_url').each(function(){
alert( $(this).text() );
})
}
});
богоносец
На сайте с 30.01.2007
Offline
768
#3
stik.name:
из-за этих параметров &fs= и &ms=

Ну а попробуйте браузером посмотреть xml_data.xml

Это удастся только с

<?xml version="1.0" ?>
<options>
<page_url>http://site.com/123123/123/1/</page_url>
<param1>&amp;fs=</param1>
<param2>&amp;ms=</param2>
</options>

& в xml имеет специальное значение... поэтому

Ошибка разбора XML: синтаксическая ошибка (Строка: 4, Символ: 9)
Ошибка: well-formedness constraint: entity declared
stik.name
На сайте с 21.03.2010
Offline
80
#4

Спасибо все за ответы, извиняюсь что задержался с ответом, нашли текущий рабочий вариант, но появилась проблема с crossdomain.

Текущий рабочий вариант:

<!DOCTYPE html>

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<div class="result"></div>

<script type="text/javascript">
$.ajax({
url: 'http://name.domain/file.xml',
type: 'GET',
async: false,
crossDomain: true,
cache: false,
dataType: 'html',
success: function(d){
//alert(d);
$(d).find('page_url').each(function(){
alert( $(this).text() );
})
}
});
</script>
</body>
</html>

Из crossdomain ошибка:

text/xml (NS_ERROR_DOM_BAD_URI)

Есть варианты как теперь заставить его парсить игнорируя crossdomain?

siv1987
На сайте с 02.04.2009
Offline
427
#5
stik.name:
Есть варианты как теперь заставить его парсить игнорируя crossdomain?

А что, раньше с дататайп хмл запрос шел игнорируя меж доменную политику?

stik.name
На сайте с 21.03.2010
Offline
80
#6
siv1987:
А что, раньше с дататайп хмл запрос шел игнорируя меж доменную политику?

Со своего хоста работает нормально, а вот с другого домена не хочет брать данные из xml файла. Реально вообще решить это вопрос?

siv1987
На сайте с 02.04.2009
Offline
427
#7
stik.name:
Со своего хоста работает нормально, а вот с другого домена не хочет брать данные из xml файла.

Что значит со "своего хоста"? Внутри доменный запрос?

Реально вообще решить это вопрос?

Реально если доступ к домену где лежит запрашиваемый файл. http://www.google.ru/search?client=opera&rls=ru&q=Access-Control-Allow-Origin&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest Ну или подгружать через разные ухищрения.

stik.name
На сайте с 21.03.2010
Offline
80
#8
Что значит со "своего хоста"? Внутри доменный запрос?

Да

Реально если доступ к домену где лежит запрашиваемый файл. http://www.google.ru/search?client=opera&rls=ru&q=Access-Control-Allow-Origin&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest Ну или подгружать через разные ухищрения.

В том то и дело что там мой домен конечно же не прописан, и нужно обойти запрос. Как либо получить xml файл и взять из него нужные параметры.

siv1987
На сайте с 02.04.2009
Offline
427
#9

Гуглите про кросс-доменные запросы, или пишите серверный даунлоадер.

stik.name
На сайте с 21.03.2010
Offline
80
#10
siv1987:
Гуглите про кросс-доменные запросы, или пишите серверный даунлоадер.

Серверный даунлоадер я и так могу на том же PHP написать за считанные минуты, но проблема заключается в том что хост который отдаёт xml, для разных айпи отдаёт разные данные. Потому и поставлена задача реализовать парсер на стороне клиента.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий