Ошибка синтаксического анализа xml несоответствующий тег ожидается link

I am running XSL file in eclipse by inputting XML file.I clearly see there is which was closed in the XSL file.I checked the other tags as well but it seems well-defined. Can you please help me in resolving this error. I have given the files I used below:
1. XML file which has reference to XSL as below:

2. XSL file which has relevant info as below:

3. jats-preview.css file used
4. overlib.js referenced
5. tooltip.css referenced

I have included the code snippets used.

Thanks.


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "http://jats.nlm.nih.gov/archiving/1.0/JATS-archivearticle1.dtd"[]>
    <?xml-stylesheet type='text/xsl' href='jats-html.xsl'?>
    <article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" article-type="research-article"><?properties open_access?>
<!-- XSL file -->

    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:mml="http://www.w3.org/1998/Math/MathML"
      exclude-result-prefixes="xlink mml">

      <xsl:output doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
        doctype-system="http://www.w3.org/TR/html4/loose.dtd"
        encoding="UTF-8"/>

      <xsl:strip-space elements="*"/>

      <!-- Space is preserved in all elements allowing #PCDATA -->
      <xsl:preserve-space
        elements="abbrev abbrev-journal-title access-date addr-line
                  aff alt-text alt-title article-id article-title
                  attrib award-id bold chapter-title chem-struct
                  collab comment compound-kwd-part compound-subject-part
                  conf-acronym conf-date conf-loc conf-name conf-num
                  conf-sponsor conf-theme contrib-id copyright-holder
                  copyright-statement copyright-year corresp country
                  date-in-citation day def-head degrees disp-formula
                  edition elocation-id email etal ext-link fax fpage
                  funding-source funding-statement given-names glyph-data
                  gov inline-formula inline-supplementary-material
                  institution isbn issn-l issn issue issue-id issue-part
                  issue-sponsor issue-title italic journal-id
                  journal-subtitle journal-title kwd label license-p
                  long-desc lpage meta-name meta-value mixed-citation
                  monospace month named-content object-id on-behalf-of
                  overline p page-range part-title patent person-group
                  phone prefix preformat price principal-award-recipient
                  principal-investigator product pub-id publisher-loc
                  publisher-name related-article related-object role
                  roman sans-serif sc season self-uri series series-text
                  series-title sig sig-block size source speaker std
                  strike string-name styled-content std-organization
                  sub subject subtitle suffix sup supplement surname
                  target td term term-head tex-math textual-form th
                  time-stamp title trans-source trans-subtitle trans-title
                  underline uri verse-line volume volume-id volume-series
                  xref year
                  mml:annotation mml:ci mml:cn mml:csymbol mml:mi mml:mn 
                  mml:mo mml:ms mml:mtext"/>

      
      <xsl:param name="transform" select="'jats-html.xsl'"/>

      <xsl:param name="css" select="'jats-preview.css'"/>
      
      <xsl:param name="report-warnings" select="'no'"/>
      
      <xsl:variable name="verbose" select="$report-warnings='yes'"/>
      
      <!-- Keys -->

      <!-- To reduce dependency on a DTD for processing, we declare
           a key to use instead of the id() function. -->
      <xsl:key name="element-by-id" match="*[@id]" use="@id"/>

      <!-- Enabling retrieval of cross-references to objects -->
      <xsl:key name="xref-by-rid" match="xref" use="@rid"/>
      
      <!-- ============================================================= -->
      <!--  ROOT TEMPLATE - HANDLES HTML FRAMEWORK                       -->
      <!-- ============================================================= -->

      <xsl:template match="/">
        <html>
          <!-- HTML header -->
          <xsl:call-template name="make-html-header"/>
          <body>
            <xsl:apply-templates/>
          </body>
        </html>
      </xsl:template>


      <xsl:template name="make-html-header">
        <head>
          <title>
            <xsl:variable name="authors">
              <xsl:call-template name="author-string"/>
            </xsl:variable>
            <xsl:value-of select="normalize-space(string($authors))"/>
            <xsl:if test="normalize-space(string($authors))">: </xsl:if>
            <xsl:value-of
              select="/article/front/article-meta/title-group/article-title[1]"/>
          </title>
          <link rel="stylesheet" type="text/css" href="{$css}"/>
          <!-- XXX check: any other header stuff? XXX -->
        </head>
      </xsl:template>


    <!-- ============================================================= -->
    <!--  TOP LEVEL                                                    -->
    <!-- ============================================================= -->

      <!--
          content model for article:
             (front,body?,back?,floats-group?,(sub-article*|response*))
          
          content model for sub-article:
             ((front|front-stub),body?,back?,floats-group?,
              (sub-article*|response*))
          
          content model for response:
             ((front|front-stub),body?,back?,floats-group?) -->
      
      <xsl:template match="article">
        <xsl:call-template name="make-article"/>
      </xsl:template>

      <xsl:template match="sub-article | response">
        <hr class="part-rule"/>
        <xsl:call-template name="make-article"/>
      </xsl:template>


    <!-- ============================================================= -->
    <!--  "make-article" for the document architecture                 -->
    <!-- ============================================================= -->

      <xsl:template name="make-article">
        <!-- Generates a series of (flattened) divs for contents of any
    	       article, sub-article or response -->

        <!-- variable to be used in div id's to keep them unique -->
        <xsl:variable name="this-article">
          <xsl:apply-templates select="." mode="id"/>
        </xsl:variable>

        <div id="{$this-article}-front" class="front">
          <xsl:apply-templates select="front | front-stub"/>
        </div>

        <!-- body -->
        <xsl:for-each select="body">
          <div id="{$this-article}-body" class="body">
            <xsl:apply-templates/>
          </div>
        </xsl:for-each>

        <xsl:if test="back | $loose-footnotes">
          <!-- $loose-footnotes is defined below as any footnotes outside
               front matter or fn-group -->
          <div id="{$this-article}-back" class="back">
            <xsl:call-template name="make-back"/>
          </div>
        </xsl:if>

        <xsl:for-each select="floats-group | floats-wrap">
          <!-- floats-wrap is from 2.3 -->
          <div id="{$this-article}-floats" class="back">
            <xsl:call-template name="main-title">
              <xsl:with-param name="contents">
                <span class="generated">Floating objects</span>
              </xsl:with-param>
            </xsl:call-template>
            <xsl:apply-templates/>
          </div>
        </xsl:for-each>

        <!-- more metadata goes in the footer -->
        <div id="{$this-article}-footer" class="footer">
          <xsl:call-template name="footer-metadata"/>
          <xsl:call-template name="footer-branding"/>
        </div>

        <!-- sub-article or response (recursively calls
    		     this template) -->
        <xsl:apply-templates select="sub-article | response"/>

      </xsl:template>


    <!-- ============================================================= -->
    <!--  End stylesheet                                               -->
    <!-- ============================================================= -->

    </xsl:stylesheet>

Это недействительный тег 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

Rsa97

@Rsa97

Для правильного вопроса надо знать половину ответа

ЕМНИП, в XML может быть только один корневой элемент. Оберните свой список в один тэг

<offers>
  <offer>...</offer>
  <offer>...</offer>
</offers>

tacitus

У вас элементы должны быть в контейнере

<root>
<offer></offer>
<offer></offer>
<offer></offer>
</root>

Пригласить эксперта


Похожие вопросы


  • Показать ещё
    Загружается…

Сбер

Екатеринбург

от 150 000 до 200 000 ₽

10 июн. 2023, в 04:04

4000 руб./за проект

10 июн. 2023, в 01:43

6500 руб./за проект

10 июн. 2023, в 00:17

5000 руб./за проект

Минуточку внимания

Это не допустимый тег 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.

Автор 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>&lt;?php
echo '&lt;?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'&gt;';
?&gt;</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

ошибка синтаксического анализа XML

Приветствую всех друзей и читателей – 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 придётся пройти эту процедуру заново. На самом деле это просто и займёт 510 минут Вашего времени.

Если у Вас есть другие решения этой проблемы, буду очень рад увидеть их в комментариях.

На сегодня это всё. До скорых встреч…

С уважением, Денис Черников!

Понравилась статья? Поделить с друзьями:
  • Ошибка синтаксического анализа xml неопределенная сущность что это
  • Ошибка синтаксического анализа xml неопределенная сущность адрес chrome browser
  • Ошибка синтаксического анализа xml некорректно строка 1 символ 1
  • Ошибка синтаксического анализа xml некорректно адрес chrome
  • Ошибка синтаксического анализа xml незакрытый маркер