I am xml parsing but i getting issue on load xml file on browser
Its going to search closing tag of </r>
. but it can not find, so it return error
error look like:
XML Parsing Error: mismatched tag. Expected: </r>.
XML look like:
<shortdescription>Format : VCD<r>Language : English</shortdescription>
how to handle this situation pls give me idea.
thank you in advance.
har07
88.1k12 gold badges82 silver badges134 bronze badges
asked Aug 12, 2014 at 9:30
Jatin GadhiyaJatin Gadhiya
1,9555 gold badges22 silver badges42 bronze badges
6
Your data is not well-formed XML, therefore the XML parser is doing the right thing by raising an error.
What would you do if there were a syntax error in your C# program? There’s only one thing to do, fix it. If at all possible, fix the program or process that generates this bad data. If that’s not possible, write a repair program to patch it up; but somehow, given the question, I suspect that’s a task beyond your level of experience.
answered Aug 12, 2014 at 12:35
Michael KayMichael Kay
155k11 gold badges91 silver badges163 bronze badges
Автор kbaott, 28.06.2011 | Просмотров: 26 610 |
Здравствуйте, как видите блог немного обновился, стал веселее и ярче. Наконец-то у меня дошли руки и до блога, давно хотел добавить в функционал несколько фич. Ну с ними Вы разберетесь как-нибудь сами, а пока я расскажу о небольшой неприятности. Сегодня заметил, что не работает ни один фид на блоге. Вообще ни один: ни RSS 0.92, ни RSS 2.0 ни RDF и даже ATOM не захотел работать. На все мои вопросы браузер отвечал одним и тем же окном:
К слову сказать я, как правило, пользуюсь браузером Mozilla Firefox 4.0.1, очень редко Opera 11.11, ну совсем редко Internet Explorer 9 (ну даже не пользуюсь, а скорее тестирую). «Мозиллой» пользуюсь для работы и серфинга, а остальными двумя проверяю как выглядят мои сайты в них. Другими браузерами не пользуюсь так как не вижу в этом смысла, для проверки совместимости есть browsershots.org, а более старые версии просто неактуальны, всем не угодишь. Как по мне, так пользователю лучше обновить (как правило бесплатно) браузер, чем искать сайт который нормально отображается в его Опере пятилетней давности. В общем, не в этом суть. А в том, что средствами Мозиллы я так и не смог просмотреть свои фиды. Сразу же пошел гуглить на эту тему. И нагуглил довольно много информации — о проблемах с RSS не писал только ленивый паралитик. Особо распылятся я не буду, а только кратко пробегусь по методам борьбы с ошибками RSS. Но сначала немного теории. Ленты RSS и им подобные написаны на языке XML, а не HTML, а XML никогда не прощает ни единой ошибки в коде, как это бывает в случае с HTML. В отличие от HTML, DOM анализатор обязан отказаться от разбора XML документа, если в документе есть ошибки. Поэтому проверять свой RSS на валидность просто необходимо. При попытке открыть ленту с багами в синтаксисе пользователь как правило видит ругню браузера. Поэтому ошибки в коде RSS Feed недопустимы. Для выявления этих ошибок есть Feed-валидаторы: http://feedvalidator.org и http://validator.w3.org, но о них позже.
Я как раз собрался «прожечь» свой фид через FeedBurner, который, как известно, не терпит ошибок в фидах: если он обнаруживает в ленте ошибку, то отказываться его принимать и говорить, что «Вы подсунули ему что угодно, но только не RSS-ленту». Я то собрался прожечь, а тут как назло эти ошибки. «Значит будем их исправлять!» — гордо подумал я и… осекся. Почему, понятнее станет в самом конце поста.
Расскажу о самых распространенных проблемах с фидами. Первой из них является «Ошибка синтаксического анализа XML». Часто советуют отключить в WordPress все плагины изменяющие параметры RSS, но это «wooden leg massage», это никогда не помогает. Далее, проблемой может быть наличие пустых строк после «?>» в php-файлах как отвечающих за фиды, так и в файлах движка и поагинов. Решением может быть плагин Fix RSS Feed 3.0 для WordPress, который помогает исправить ошибки RSS фидов такие, как: “Error on line 2: The processing instruction target matching “[хХ][мМ][LL]” is not allowed.” когда вы пытаетесь прожечь свой RSS Feed через FeedBurner, или ошибка “XML or text declaration not at start of entity” которая появляется в браузере FireFox, или ошибка, которая возникает в браузере Opera “XML declaration not at beginning of document” и т.д. Качаете плагин, устанавливаете любым удобным способом, активируете, теперь в админпанели в меню «Парамерты» вібираем «Fix RSS Feed», ставим переключатель в None (нечего с нас честных блоггеров за чепуху баксы требовать), нажимаем «Fix wordpress rss feed errors» (предварительно нужно установить chmod 777 на файл wp-blog-header.php). Если ошибки были, то они исправлены плагином. Если вдруг что пойдет не так, то можно восстановить все измененные файлы (Restore fix). Мне этот плагин не помог.
Вторая возможная проблема и ее решение: BOM (п>ї). Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого в кодировке UTF-8. Поскольку любимый WordPress живет именно в этой кодировке, не часто, но в структуру его файлов эти символы попадают. Причем, они могут попадать не обязательно в файлы фидов, даже если они затесались в файлик какого-то плагина, RSS уже может показаться FeedBurner’у верхом непристойности. Выискать такие файлы вручную невозможно, поэтому нужно обратиться к средствам автоматизации, а именно к скрипту поиска ВОМ’ов — Find BOM. Разархивируйте в корень сайта (туда где лежит файл wp-config.php), далее в строке адреса из админки введите http://вашсайт/find_bom.php в итоге по окончанию сканирования файлов скрипт выдаст список негодяев, в теле которых живут ВОМ’ы. Удалить их теперь не сложно — выкачиваем на локальный компьютер, скачиваем актуальную версию редактора Notepad ++ (никаких Блокнотов!), открываем в нем найденные файлы, выбираем из меню «Кодировки» пункт «Преобразовать в UTF-8 без ВОМ» — это стопроцентно вылечит файл от ВОМ, сохраняем, заливаем обратно. И этот скрипт мне не помог, навязчивое желтое окно висело…
Третий вариант — «Тяжелая артиллерия». Заходим через FTP менеджер в каталог wp-includes, и открываем в любом редакторе, который корректно работает с кодировкой UTF-8 без BOM (например Notepad++), файлы: «feed-rss.php», «feed-rss2.php», «feed-rss2-comments.php», «feed-atom.php», «feed-rdf.php».В начале каждого из них находим строчку:
<code><?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?></code>
и жестоко удаляем ее. Изменения во всех указанных файлах ни к чему не привели: «(С) А воз и ныне там».
Четвертый вариант — «На грубость нарываешься». Наш путь снова лежит в каталог wp-includes, там берем и редактируем файлы feed-rss2.php и feed-rss2-comments.php. В файле убираем первые 13-14 строк (у кого как) вплоть до <rss version=»2.0″ …… К сожалению и это не помогло. Я уже начал отчаиваться и вдруг нахожу еще один способ.
Пятый способ — «Бредни пьяного саппорта». На каком-то забугорном сайте нашел я такой text:
What we need, is to add a little tip in specific files where wordpress feeds are made up before to be outputted to the browser on request. So, we go to fix this by opening the follow file, if the feed we want is RSS2 in wordpress (we will see all any other after in any case):
wp-includes/feed-rss2.php
open it with a text editor and read on the very top section, the following code:header(‘Content-Type: text/xml; charset=’ . get_option(‘blog_charset’), true);
$more = 1;To fix the feed on wordpress (but not only, it is obviously valid in, and for, any other feed or non feed contest where we can have the same necessity), add this tricky Php code immediately after:
$out = ob_get_contents();
$out = str_replace(array(“n”, “r”, “t”, ” “), “”, $input);
ob_end_clean();Do the same almost with the comment’s feed file: feed-rss2-comments.php
Save/replace the feed-rss2.php and the feed-rss2-comments.php files modified in this way and enjoy your re-enabled feeds!
Короче, в файлы фидов нужно добавить три строчки кода, на некоторых сайтах басурманы кричат, что помогает. Мне… не помогло.
Сижу, я расстроенный, чуть не плачу. Потихоньку открываю один за одним файлы движка, просматриваю код плагинов, а что еще делать, гуглование… гугление… гугловство не помогло — одни и те же копипасты, ничего нового. Нервы на пределе. И тут я просто так, ради шутки авторизуюсьна FeedBurner’е и предлагаю ему скушать прожечь мой фид — и, о чудо, он его принимает и принимаеться предлагать мне всяческие настройки! На радостях пытаюсь своими куриными мозгами понять «а чё ваще?». Непонимание переходит в недоумение. Хватаю несколько фирменных фич FeedBurner’а, несу их на бог, проверяю — работают!
Иду на вышеуказанные фид-валидаторы, проверяю и… зарабатываю кнопку «This is a valid RSS feed«. То бишь это валидный RSS-канал, кроме одной ошибки и то из-за невалидного embed-кода электронного журнала, которые не играет никакой роли. Проверяю в «Опере» и «Ослике» — работает все и RSS, и ATOM. Думал долго. Оказалось нужна была кнопка браузера Mozilla Firefox — «Стереть недавнюю историю…«.
Лента заработала после применения одного из перечисленных способов лечения. Но вот после какого? И почему вылезла ошибка? Не скажет, уже наверное, никто. Как говориться, «за больной головой и рукам нет покоя». Все это оказалось очень напряжным, но зато я изучил все аспекты rss-терапии.
Вместо эпилога:
Я тут представил свою реакцию, если бы мне году в 1995 показали игровой процесс Battlefield 3 и сказали, что в 2012 году вместо нее я буду сидеть и играть на эмуляторе денди в танчики…
—
Метки: atom, feedburner, rss, xml, ошибка
Писано 28.06.2011
Приветствую всех друзей и читателей – Sozdaiblog.ru!
Сегодня Вы узнаете, как грубым, но эффективным способом починить в WordPress RSS ленту и избавиться от надоедливой ошибки синтаксического анализа XML.
Я уверен, что многие из Вас при нажатии на оранжево-полосатую кнопку ни один раз наблюдали следующую картину:
К сожалению, я тоже сталкивался с этим чудным багом.
В то время из-за своей неопытности мне пришлось полдня провисеть в Интернете, бегая от сайта к сайту, дабы найти лекарство от этой заразы.
По себе знаю, что когда в Интернете целенаправленно пытаешься найти необходимую информацию, то хрена лысого она попадается. Будешь сутками лазить в поисках решения, пока со злости не бросишь это занятие.
Но, я то парень упёртый и на одном из сайтов всё-таки разыскал своеобразный «бычий способ», но реально работающий.
Итак.
Чтобы исправить ошибку синтаксического анализа XML, нужно немного поковыряться в ядре движка.
В корневой папке Вашего сайта необходимо найти каталог «wp-includes». В этом каталоге нам потребуется подкорректировать следующие файлы:
1. feed-atom-comments.php
2. feed-atom.php
3. feed-rdf.php
4. feed-rss.php
5. feed-rss2-comments.php
6. feed-rss2.php
В первых двух файлах нужно удалить всё, что находится до блока:
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="<?php bloginfo_rss( 'language' ); ?>" xmlns:thr="http://purl.org/syndication/thread/1.0" <?php do_action('atom_ns'); do_action('atom_comments_ns'); ?> >
В третьем до:
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" <?php do_action('rdf_ns'); ?> >
У четвёртого отсекаем все строчки до:
<rss version="0.92">
А у пятого и шестого до:
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" <?php do_action('rss2_ns'); do_action('rss2_comments_ns'); ?> >
Обязательно проверьте все шесть файлов на наличие пустых строк. Они не должны присутствовать ни в одном документе.
Закончив все действия, не забудьте сохраниться.
Спустя некоторое время Ваша RSS лента чудесным образом заработает.
Единственная загвоздка в том, что при обновлении WordPress придётся пройти эту процедуру заново. На самом деле это просто и займёт 5—10 минут Вашего времени.
Если у Вас есть другие решения этой проблемы, буду очень рад увидеть их в комментариях.
На сегодня это всё. До скорых встреч…
С уважением, Денис Черников!
Это недействительный тег XML:
<link href="{% static "css/landing-page.css" %}" rel="stylesheet">
Вместо этого это должно быть:
<link href="{% static "css/landing-page.css" %}" rel="stylesheet" />
Это связано с тем, что в соответствии с спецификациями XML любой тег должен быть либо закрыт с помощью пары, либо автоматически закрыт, включая косой чертой (/
) в и открытии тега. Большинство браузеров это понимают, но, строго говоря, это неверно.
Кроме того, если у вас есть какие — либо <hr>
, <br>
или подобные одиночные теги, вы должны исправить их всех, а также, например, <hr/>
, <br/>
См. Этот список: http://xahlee.info/js/html5_non-closing_tag.html.
Это не допустимый тег XML:
<link href="{% static "css/landing-page.css" %}" rel="stylesheet">
Вместо этого должно быть:
<link href="{% static "css/landing-page.css" %}" rel="stylesheet" />
Это связано с тем, что, согласно спецификациям XML, любой тег должен быть либо закрыт своей парой, либо самозакрыт, добавив косую черту (/
) на и открывающем теге. Большинство браузеров это понимают, но, строго говоря, это неверно.
Кроме того, если у вас есть <hr>
, <br>
или аналогичные отдельные теги, вы должны будете исправить их все, то есть <hr />
, <br />
Смотрите этот список: http://xahlee.info/js/html5_non-closing_tag.html.
Решения вопроса 2
@Rsa97
Для правильного вопроса надо знать половину ответа
ЕМНИП, в XML может быть только один корневой элемент. Оберните свой список в один тэг
<offers>
<offer>...</offer>
<offer>...</offer>
</offers>
У вас элементы должны быть в контейнере
<root>
<offer></offer>
<offer></offer>
<offer></offer>
</root>
Пригласить эксперта
Похожие вопросы
-
Показать ещё
Загружается…
Сбер
•
Екатеринбург
от 150 000 до 200 000 ₽
25 июн. 2023, в 10:30
6000 руб./за проект
25 июн. 2023, в 10:26
15000 руб./за проект
25 июн. 2023, в 09:57
7000 руб./за проект