Ошибка при xslt преобразовании ошибка преобразования xslt

В прошлой статье я описал как реализовать инклудинг и кеширование при обработке xsl-темплейтов на стороне клиента. Сегодня я раскажу с помощью каких инструментов можно проводить отладку xslt-преобразований на стороне клиента и о работе конструкции <xsl:value-of select=«xxx» disable-output-escaping=«yes»/> в firefox.

Отладка XSLT на клиенте

Во время обработки xsl-документов в браузере могут происходить различные ошибки:
1) сетевые ошибки — когда xml или xsl данные не были получены;
2) ошибки обработки шаблонов.

Сетевые ошибки

Для контроля сетевых ошибок можно использовать отладочные средства браузеров. Все отладочные средства firebug (firefox), dragonfly (opera) и devtools (chrome) могут показать какие ресурсы были загружены из сети непосредственно ассинхронным запросом. Например, если мы обрабатываем данные in_data.xml с помощью шаблона first.xsl, то загрузку этих данных мы сможем проконтролировать
— раздел «net» в firebug
— раздел «net» в dragonfly
— раздел «resources» в devtools.

Иначе дело обстоит если для успешной обработки нужно подгрузить дополнительный xsl-файл (инклуд). В этом случае firebug (firefox) не покажет, что что-то было загружено.

А интегрированные среды дебагинга dragonfly (opera) и devtools (chrome) покажут какие дополнительные xsl файлы были подгружены.

Ошибки обработки шаблонов

Если во время обработки шаблона произошла ошибка, то её можно отловить и вывести в удобном для вас виде. Мне удобно во время разработки скидывать такие сообщения в консоль firebug’а

jQuery('#id_div').transform(
{ xml:'res/1.xml',
 xsl:'res/1.xsl',
 success:function (){
  jQuery('#id_info').html('готово');    
 },
 error:function (xml_data, xsl_data, success, cur_obj, error){
  console.log('xml: '+xml_data);
  console.log('xsl: '+xsl_data);
  console.log('success: '+success);         
  console.log('cur_obj:');console.log(cur_obj);
  console.log('error:');console.log(error);
 }
});
* This source code was highlighted with Source Code Highlighter.

В этом случае вывод ошибки будет примерно таким:

Событие «error» будет вызвано в случае возникновения ошибки. В функцию события будет передано несколько параметров, основной из которых — error — собстенно описание ошибки.

disable-output-escaping=«yes» в firefox

Описание проблемы

В некоторых случаях в xml-данных могут приходить целые куски отформатированного html, в этих случаях эти куски нужно вставлять в конечный документ без изменений, то есть «как есть». Например это могут быть данные, содержащие результаты поиска, в которых искомое слово выделенно жирным («мы <b>искали</b> все возможные решения»). Сделать простую замену текста средствами xslt можно, но того не стоит (попробуйте как-нибудь на досуге заняться этим). Поэтому проще передавать уже отформатированный текст. Опытный программист придумает ещё массу примеров. Для вставки данных без экранирования в xslt есть специальный атрибут disable-output-escaping, который необходимо установить в «yes». Выглядит это так

<xsl:value-of select="xxx" disable-output-escaping="yes"/>* This source code was highlighted with Source Code Highlighter.

Но в firefox, начиная самой первой версией и заканчивая всей третьей веткой (в firefox 4 не тестировал), не полная реализация xsl-процессора. Их xsl-процессор, который индентифицирует себя как «Transformiix», не обрабатывает disable-output-escaping=«yes». Этой ошибке уже много лет https://bugzilla.mozilla.org/show_bug.cgi?id=98168 и недавно мы «отмечали» 9-летие этой баги. Там же по ссылке написаны оправдания команды firefox, которые можно свести к одному — там много работы, если хотите правьте сами.

Решение проблемы

Существует такое решение проблемы — использовать вместо конструкции <xsl:value-of select=«xxx» disable-output-escaping=«yes»/> вызов <xsl:copy-of select=«xxx»/>. Но в этом случае мы не можем передать в узле xxx данные в виде

<xxx>Резельтат поиска <![CDATA[<i>"первый"</i>]]></xxx>* This source code was highlighted with Source Code Highlighter.

а придётся передавать данные так

<xxx>Резельтат поиска <i>"первый"</i></xxx>* This source code was highlighted with Source Code Highlighter.

то есть это будет уже не совсем верный xml-файл. И тогда мы получаем проблему в остальных браузерах, где такое решение работать уже не будет.

Другое решение проблемы

Я решил использовать другой подход. Использовать специальный фикс, написанный на javascript.

1. Вместо привычного <xsl:value-of select="xxx" disable-output-escaping="yes"/> в наших шаблонах придётся использовать вызов

<xsl:call-template name="inc_disable_output_escaping"><xsl:with-param name="param" select="xxx"/></xsl:call-template>* This source code was highlighted with Source Code Highlighter.

Где темплейт inc_disable_output_escaping выглядит так:

<xsl:template name="inc_disable_output_escaping">
  <xsl:param name="param"></xsl:param>
  <xsl:choose>
   <xsl:when test="system-property('xsl:vendor')='Transformiix'">
    <!-- костыль для firefox -->
    <div style="display:none" class="fix_ff_disable_output_escaping"><xsl:value-of select="$param" disable-output-escaping="yes"/></div>
   </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="$param" disable-output-escaping="yes"/>
   </xsl:otherwise>
  </xsl:choose>  
</xsl:template>
* This source code was highlighted with Source Code Highlighter.

В этом темплейте по имени xsl-процессора (xsl:vendor) мы выведем данные стандартной конструкцией с disable-output-escaping=«yes», а в случае xsl-процессора от firefox’а данные вставим в невидимый контейнер так, как firefox эти данные может вставить, то есть в экранированном виде.
А потом, после успешного преобразования, и обновления DOM документа, мы перекодируем данные в этих контейнерах на правильные и вставим их на место этих контейнеров.

function fix_ff_disable_output_escaping() {
  jQuery('div.fix_ff_disable_output_escaping').each(
  function(i, obj){
   var j_obj=jQuery(obj);
   j_obj.replaceWith(Encoder.htmlDecode(j_obj.html()));
  }
 )
}
* This source code was highlighted with Source Code Highlighter.

Для декодирования html-мнемоник используется функция htmlDecode js-библиотеки Encoder.

Пример работы данной техники и архив с решением можно взять тут ra-project.net/xsl_tests/test2.html

PS Не забывайте отправлять правильный content-type для xml/xsl документов. А именно «Content-type: text/xml».

Firefox tells me «Error during XSLT transformation: XSLT transformation failed.» for an XML file that uses the following XSL file:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005'
xmlns:fn='http://www.w3.org/2005/xpath-functions'>
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>...</title></head><body>
<table frame='border' rules='all'>
<tr><th>site</th><th>week</th><th>pages</th><th>pageviews</th></tr>
<xsl:for-each select='feeds/feed/week'>
  <xsl:for-each-group select='entry' group-by='fn:concat(
    if (fn:matches(dxp:dimension[@name="ga:pagePath"]/@value, "^/sales"))
      then "/sales"
      else "non-/sales",
    " referred from ",
    if (fn:matches(dxp:dimension[@name="ga:referralPath"]/@value, "^/forsale"))
      then "/forsale"
      else "non-/forsale"
    )'>
    <tr>
      <td><xsl:value-of select='../dxp:tableName'/></td>
      <td>
        <xsl:value-of select='../dxp:startDate'/>-<xsl:value-of select='../dxp:endDate'/>
      </td>
      <td><xsl:value-of select='current-grouping-key()'/></td>
      <td><xsl:value-of select="sum(current-group()/dxp:metric/@value)"/></td>
    </tr>
  </xsl:for-each-group>
</xsl:for-each>
</table></body></html>
</xsl:template>
</xsl:stylesheet>

I can’t figure out what might be wrong with this. Anyone know?

(Obviously, if further info is needed from me in order that someone be able to answer this, I’ll be glad to provide that info: please comment asking for it. I don’t even know what kind of info might be helpful.)


EDIT: Someone mentioned in an answer that my including the XML file might help. It’s very long, but its general structure is:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='./foo.xsl'?>
<feeds xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005' >
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy1'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar2&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar2</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy2'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
</feeds>

Firefox tells me «Error during XSLT transformation: XSLT transformation failed.» for an XML file that uses the following XSL file:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005'
xmlns:fn='http://www.w3.org/2005/xpath-functions'>
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>...</title></head><body>
<table frame='border' rules='all'>
<tr><th>site</th><th>week</th><th>pages</th><th>pageviews</th></tr>
<xsl:for-each select='feeds/feed/week'>
  <xsl:for-each-group select='entry' group-by='fn:concat(
    if (fn:matches(dxp:dimension[@name="ga:pagePath"]/@value, "^/sales"))
      then "/sales"
      else "non-/sales",
    " referred from ",
    if (fn:matches(dxp:dimension[@name="ga:referralPath"]/@value, "^/forsale"))
      then "/forsale"
      else "non-/forsale"
    )'>
    <tr>
      <td><xsl:value-of select='../dxp:tableName'/></td>
      <td>
        <xsl:value-of select='../dxp:startDate'/>-<xsl:value-of select='../dxp:endDate'/>
      </td>
      <td><xsl:value-of select='current-grouping-key()'/></td>
      <td><xsl:value-of select="sum(current-group()/dxp:metric/@value)"/></td>
    </tr>
  </xsl:for-each-group>
</xsl:for-each>
</table></body></html>
</xsl:template>
</xsl:stylesheet>

I can’t figure out what might be wrong with this. Anyone know?

(Obviously, if further info is needed from me in order that someone be able to answer this, I’ll be glad to provide that info: please comment asking for it. I don’t even know what kind of info might be helpful.)


EDIT: Someone mentioned in an answer that my including the XML file might help. It’s very long, but its general structure is:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='./foo.xsl'?>
<feeds xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005' >
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy1'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar2&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar2</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy2'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
</feeds>


Форум программистов Vingrad

Новости ·
Фриланс ·
FAQ

Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники

Форум -> Технологии и алгоритмы -> XML, XSL

Модераторы: diadiavova

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> XSLT 2.0 Ошибка преобразования!!! Браузер выводит ошибку преобразования 

:(

Опции темы

zeusakm

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

С xslt 1.0 работал все что выводил через Firefox запуская XML в котором цепляется таблица XSLT 1.0 версии работает все норм.
Тут попробовал то же самое с XSLT 2.0 ничего не выходит — пишет: 
Ошибка при XSLT преобразовании: Ошибка преобразования XSLT.
код XML такой:

Это сообщение отредактировал(а) zeusakm — 25.10.2008, 22:21

zeusakm

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

Код

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="nodes.xsl"?>
<doc>
    <heading>Oksana heading!!!</heading>
    <para>1.1</para>
    <para>1.2</para>
    <para>1.3</para>
    <heading>Arthur heading programmer</heading>
    <para>1.4</para>
    <para>1.5</para>
    <para>1.6</para>
    <heading>All other famalyes</heading>
    <para>1.7</para>
    <para>1.8</para>        
</doc>

Так же XSL код:

Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
        <xsl:template match="/doc">
            <xsl:for-each-group select="*" group-starting-with="heading">
                <xsl:apply-templates select="current-group()[self::para]"/>
            </xsl:for-each-group>
        </xsl:template>
    </xsl:stylesheet>

Наверняка для профи в xml/xslt, эта проблема — не проблема и решить ее можно легко. 
Так что буду рад Вашей поддержке =)

Это сообщение отредактировал(а) zeusakm — 25.10.2008, 23:43

zeusakm

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

Ппц 35 просмотров и ни одного ответа?! Видимо действительно для России XSLT 2.0 слишком новая технология. =)) 

JVM

Бывалый
*

Профиль
Группа: Участник
Сообщений: 189
Регистрация: 30.10.2006

Репутация: 4
Всего: 5

Ну конечно. Особенно если учесть, что для преобразования XML использовать Firefox — его же в России пишут.



















Правила форума «XML/XSLT»
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском — возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »

Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему

[ Время генерации скрипта: 0.1230 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]

Реклама на сайте

   
Информационное спонсорство

Firefox сообщает мне: «Ошибка при преобразовании XSLT: преобразование XSLT не удалось». для файла XML, который использует следующий файл XSL:

<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005'
xmlns:fn='http://www.w3.org/2005/xpath-functions'>
<xsl:output method="html"/>
<xsl:template match="/">
<html><head><title>...</title></head><body>
<table frame='border' rules='all'>
<tr><th>site</th><th>week</th><th>pages</th><th>pageviews</th></tr>
<xsl:for-each select='feeds/feed/week'>
  <xsl:for-each-group select='entry' group-by='fn:concat(
    if (fn:matches(dxp:dimension[@name="ga:pagePath"]/@value, "^/sales"))
      then "/sales"
      else "non-/sales",
    " referred from ",
    if (fn:matches(dxp:dimension[@name="ga:referralPath"]/@value, "^/forsale"))
      then "/forsale"
      else "non-/forsale"
    )'>
    <tr>
      <td><xsl:value-of select='../dxp:tableName'/></td>
      <td>
        <xsl:value-of select='../dxp:startDate'/>-<xsl:value-of select='../dxp:endDate'/>
      </td>
      <td><xsl:value-of select='current-grouping-key()'/></td>
      <td><xsl:value-of select="sum(current-group()/dxp:metric/@value)"/></td>
    </tr>
  </xsl:for-each-group>
</xsl:for-each>
</table></body></html>
</xsl:template>
</xsl:stylesheet>

Я не могу понять, что с этим не так. Кто-нибудь знает?

(Очевидно, если от меня потребуется дополнительная информация, чтобы кто-то мог ответить на этот вопрос, я буду рад предоставить эту информацию: прокомментируйте, прося об этом. Я даже не знаю, какая информация может быть полезна. )


EDIT: Кто-то упомянул в ответе, что мое включение файла XML может помочь. Он очень длинный, но его общая структура такова:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type='text/xsl' href='./foo.xsl'?>
<feeds xmlns:dxp='http://schemas.google.com/analytics/2009' 
xmlns:gd='http://schemas.google.com/g/2005' >
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy1'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
<feed><week>
    <id>http://www.google.com/analytics/feeds/data?ids=ga:bar2&amp;dimensions=ga:pagePath,ga:referralPath&amp;metrics=ga:pageviews&amp;filters=ga:medium%3D@referral&amp;start-date=2011-12-11&amp;end-date=2011-12-17</id>
    <link rel='self' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
    <link rel='next' type='application/atom+xml' href='https://www.google.com/analytics/feeds/data?start-index=11&amp;max-results=10&amp;end-date=2011-12-17&amp;start-date=2011-12-11&amp;metrics=ga%3Apageviews&amp;ids=ga%3Abar2&amp;dimensions=ga%3ApagePath%2Cga%3AreferralPath&amp;filters=ga%3Amedium%3D%40referral'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='9999'/>
        <dxp:tableName>bar2</dxp:tableName>
    <dxp:endDate>2011-12-17</dxp:endDate>
    <dxp:startDate>2011-12-11</dxp:startDate>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
    <entry gd:etag='W/&quot;baz.&quot;' gd:kind='analytics#datarow'>
        <dxp:dimension name='ga:pagePath' value='/'/>
        <dxp:dimension name='ga:referralPath' value='/xyzzy2'/>
        <dxp:metric confidenceInterval='0.0' name='ga:pageviews' type='integer' value='999'/>
    </entry>
</week>
</feed>
</feeds>

Всем привет.
Начал изучать xml и xsl. написал свой первый код, он не работает, почему? Вот фалй xml.xml:

XML
1
2
3
4
5
6
7
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="one.xsl"?>
<plan>
    <sec>
        <name>some text</name>
    </sec>
</plan>

Вот файл one.xsl:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/Transform">
<xsl:template match="plan">
    <html>
        <xsl:apply-templates/>
    </html>
</xsl:template>
<xsl:template match="sec">
    <p>
        <xsl:value-of select="name"/>
    </p>
</xsl:template>
</xsl:stylesheet>

Как Я понимаю при запуске xml файла в браузере одлжна формироваться html страничка. Но в ие появляется просто белый экран, а в опере выдает ошибку:
This document had an invalid XSLT stylesheet. Error message from the XSLT engine:
Error: missing required version attribute
Но Я пробывал указать версию, не помогает.
Скажите пожалуйста, где у меня ошибка?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Добрый день.
Если кто сталкивался с подобным или какой косяк виден — скажите пож что делаю не так.

Делаю вывод в Excel посредством XSLT преобразования.
Сначала преобразую внутреннюю таблицу в XML посредством стандартного преобразования ID, затем полученный XML преобразую в Excel совместимый XML посредством написанного XSLT преобразования ZST_1, затем сохраняю файл на рабочую станцию в файл с расширением .XLS.

При открытии файла в Excel происходит предупреждение, что формат открываемого файла отличается от указанного в расширении. Если предупреждение игнорировать, то файл открывается.
Если же сохранять файл с расширением .XML то Excel его не открывает, потому что при выполнении трансформации ZST_1 почему то исчезает строка <?mso-application progid=»Excel.Sheet»?> по которой определяется что это XML совместимый с Excel.
Как избавиться от этого сообщения?

И есть ли способ указать в преобразовании, что нужно сохранять в UTF-16, потому как моё преобразование сохраняет в UTF-8 что в ряде случае приводит к неотображению нужного текста.

программа

Code:

REPORT Z_TEST1.

data:
      BEGIN OF z_PARTNER,
        LIFNR TYPE LIFNR,
        NAME(25),
      end OF z_PARTNER,
      T_PARTNER like STANDARD TABLE OF z_PARTNER.

CLEAR: T_PARTNER, z_PARTNER.
z_PARTNER-LIFNR = ‘1’.
z_PARTNER-NAME = ‘номер 1’.
APPEND z_PARTNER to t_PARTNER.
z_PARTNER-LIFNR = ‘2’.
z_PARTNER-NAME = ‘номер 2’.
APPEND z_PARTNER to t_PARTNER.

* трансформация ABAP2XML
TYPES: z_xml(1024) TYPE x.
DATA:  lt_xml  TYPE STANDARD TABLE OF z_xml,
       lt_xml_xls LIKE lt_xml.
CALL TRANSFORMATION id
  SOURCE data_node = t_PARTNER
  RESULT XML lt_xml.

* трансформация XML2XML(EXCEL)
CALL TRANSFORMATION ZST_1
  SOURCE XML lt_xml[]
  RESULT XML lt_xml_XLS.

* выгрузка
* временная директория
DATA:
  l_filename TYPE string,
  l_dirname  TYPE string.
CALL METHOD cl_gui_frontend_services=>get_sapgui_workdir
  CHANGING
    sapworkdir = l_dirname
  EXCEPTIONS
    OTHERS     = 0.
CHECK sy-subrc = 0.

* имя файла для выгрузки
CLEAR: l_filename.
CONCATENATE l_dirname ‘TST’ ‘_’ sy-datum ‘_’ sy-uzeit ‘.xls’ INTO l_filename.
* выгрузка файла
CALL METHOD cl_gui_frontend_services=>gui_download
  EXPORTING
    filename = l_filename
    filetype = ‘BIN’
  CHANGING
    data_tab = lt_xml_XLS.

* откроем выгруженный XML-эксель
cl_gui_frontend_services=>execute( document = l_filename operation = ‘OPEN’ ).

преобразование ZST_1

Code:

<xsl:transform xmlns:xsl=»http://www.w3.org/1999/XSL/Transform» xmlns:sap=»http://www.sap.com/sapxsl» xmlns:asx=»http://www.sap.com/abapxml» version=»1.0″>
  <xsl:strip-space elements=»*»/>
  <xsl:template match=»/»>
    <?mso-application progid=»Excel.Sheet»?>
    <Workbook xmlns=»urn:schemas-microsoft-com:office:spreadsheet» xmlns:o=»urn:schemas-microsoft-com:office:office» xmlns:x=»urn:schemas-microsoft-com:office:excel» xmlns:ss=»urn:schemas-microsoft-com:office:spreadsheet» xmlns:html=
«http://www.w3.org/TR/REC-html40»>
      <DocumentProperties xmlns=»urn:schemas-microsoft-com:office:office»>
        <Version>12.00</Version>
      </DocumentProperties>
      <ExcelWorkbook xmlns=»urn:schemas-microsoft-com:office:excel»>
        <WindowHeight>8580</WindowHeight>
        <WindowWidth>17100</WindowWidth>
        <WindowTopX>360</WindowTopX>
        <WindowTopY>45</WindowTopY>
        <ProtectStructure>False</ProtectStructure>
        <ProtectWindows>False</ProtectWindows>
      </ExcelWorkbook>
      <Styles>
        <Style ss:ID=»Default» ss:Name=»Normal»>
          <Alignment ss:Vertical=»Bottom»/>
          <Borders/>
          <Font ss:Color=»#000000″ ss:FontName=»Calibri» ss:Size=»11″ x:CharSet=»204″ x:Family=»Swiss»/>
          <Interior/>
          <NumberFormat/>
          <Protection/>
        </Style>
        <Style ss:ID=»s62″>
          <Borders>
            <Border ss:LineStyle=»Continuous» ss:Position=»Bottom» ss:Weight=»1″/>
            <Border ss:LineStyle=»Continuous» ss:Position=»Left» ss:Weight=»1″/>
            <Border ss:LineStyle=»Continuous» ss:Position=»Right» ss:Weight=»1″/>
            <Border ss:LineStyle=»Continuous» ss:Position=»Top» ss:Weight=»1″/>
          </Borders>
        </Style>
      </Styles>

      <Worksheet ss:Name=»Лист12345″>
        <Table ss:DefaultRowHeight=»15″ ss:ExpandedColumnCount=»4″ ss:ExpandedRowCount=»20000″ x:FullColumns=»1″ x:FullRows=»1″>
          <xsl:for-each select=»asx:abap/asx:values/DATA_NODE/item»>
              <Row>
                <Cell ss:StyleID=»s62″>
                  <Data ss:Type=»Number»>
                    <xsl:value-of select=»LIFNR»/>
                  </Data>
                </Cell>
                <Cell ss:StyleID=»s62″>
                  <Data ss:Type=»String»>
                    <xsl:value-of select=»NAME»/>
                  </Data>
                </Cell>
                <Cell ss:StyleID=»s62″>
                  <Data ss:Type=»String»>
                    <xsl:value-of select=»asx:abap/asx:values/DATA_NODE/item/NUMBER_OF_LINE»/>
                  </Data>
                </Cell>
                <Cell ss:StyleID=»s62″/>
              </Row>
          </xsl:for-each>
        </Table>

        <WorksheetOptions xmlns=»urn:schemas-microsoft-com:office:excel»>
          <PageSetup>
            <Header x:Margin=»0.3″/>
            <Footer x:Margin=»0.3″/>
            <PageMargins x:Bottom=»0.75″ x:Left=»0.7″ x:Right=»0.7″ x:Top=»0.75″/>
          </PageSetup>
          <Selected/>
          <Panes>
            <Pane>
              <Number>3</Number>
            </Pane>
          </Panes>
          <ProtectObjects>False</ProtectObjects>
          <ProtectScenarios>False</ProtectScenarios>
        </WorksheetOptions>
      </Worksheet>
    </Workbook>

  </xsl:template>
</xsl:transform>

��������� ������ �������

��������� ������ �������

��� ������������� JavaScript ��� �������� ���������� XML � XSL � ������ � ���� ����� �����, ��� �������� �� ������� �������. � ���������� ������� � ������� �� �������, ������ ��������� �Error!� � ��������-��������� <DIV> ��������� HTML, �� ��� �� ����� ������������. ��� �������� �������������� ����������?�

� ��������� ������� � �������� ������ ������ �������, ������� ������ ��� <PLANET>planets.xml �� ��� <PLANETS>:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
�<PLANETS>
� <NAME>Mercury</NAME>
��<MASS UNITS="(Earth = 1)">.0553</MASS>
��<DAY UNITS="days">58.65</DAY>
��<RADIUS UNITS="miles">1516</RADIUS>
��<DENSITY UNITS="(Earth = 1)">.983</DENSITY>
��<DISTANCE UNITS="million miles">43.4</DISTANCE><!--B ���������-->
�</PLANET>
�.
�.
�.

� ��������� �������� validateOnParse ������� XMLDocumenttrue (�������� �� ��������� � false, ��� �������� ���������� ��������), ������� ��������� MSXML ������� ��� ������ �������. ������ XMLDocument �������� ������ parseError, � ���� ��� �������� errorCode �� ����� ����, ��� �������� ������� ������. ������ � ���� �� ������ ������� ��������� �Error!�, � ������������ ������ ��� ������ ����� ������� getError, ������� ���������� ������ � ����������� � ����� � ������� ������.

� ����� ��������� ���� �������������� ���������� � ��������� �������� <url, line, linepos � reason ������� parseError ��� ����, ����� ���������� ��������� �������� ����, ������, ������� ������ � �� �������� (������� 10.1).�

������� 10.1. �������� �������������� XSLT � ����������� ������ �������

<HTML>
�<HEAD>
� <TITLE>XSLT Using JavaScript</TITLE>
�� <SCRIPT LANGUAGE="JavaScript">
��� function xslt() {
��� var XMLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
�� �var XSLDocument = new ActiveXObject('MSXML2.DOMDocument.3.0');
�� �var HTMLtarget = document.all['targetDIV'];
��� XMLDocument.validateOnParse = true;
��� XMLDocument.load('planets.xml');
�� �if (XMLDocument.parseError.errorCode != 0) {
��� �HTMLtarget.innerHTML = getError(XMLDocument);
��� �return false;
��� }
��� XSLDocument.validateOnParse = true;
�� �XSLDocument.load('planets.xsl');
�� �if (XSLDocument.parseError.errorCode != 0) {
��� �HTMLtarget.innerHTML = getError(XSLDocument);
��� �return false;
��� }
��� HTMLtarget.innerHTML = XMLDocument.transformNode(XSLDocument);
�� �return true;
�� }
�� function getError(errorObject) {
��� var Error = new String;
��� Error = "Error. " + errorObject.parseError.url + "<BR>" +
��� �"Line: " + errorObject.parseError.line + "<BR>" +
���� "Character: " + errorObject.parseError.linepos + "<BR>" +
�� ��"Description: " + errorObject.parseError.reason;
�� �return Error;
�� }
� </SCRIPT>
�</HEAD>
�<BODY>
��<DIV>
��</DIV>
�</BODY>
</HTML>

��������� ����� ������� �� ���. 10.2, ��� �������� ��������� ������ ����, ����� ������ � �������� ������ ����������� MSXML. ���� �� ����������� ������������� �������������� XSLT � Internet Explorer, ����� ������������ ������������� ���� ��������� ��������� �������, ��������� �������� ������ ������� ������������� �����.

���. 10.2. ��������� ������ �������

���� ��� � �������������� ��� ������ ���������� MSXML ������ �������� �������, �� ����� � ��� ���������� ����������� ������ ������������. ��������, � ��������� ������� � ������������ XSLT � Internet Explorer ��� ���������� ������ ������ � HTML-������� �� ������� ������. ��� ����� � ���� ���������� � ��������� ����� ������ ������� ������.

Версия Kettle8.1, подготовьте правильные файлы xml и xsl, затем настройте следующий процесс, ошибка преобразования:

net.sf.saxon.trans.XPathException:org.xml.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

Проблема заключается в ошибке в Kettle8.1. Если вы обнаружили эту аномалию в Интернете, перейдите по следующей ссылке:

https://blog.csdn.net/zhengyangzkr/article/details/76717439

Большинство из них сказали, что, поскольку платформа Windows добавила EF BB BF за три байта перед файлом формата utf-8, это вызвало ошибку при разборе xml.

Далее проверяем код соответствующего классаXslt.java обнаружил, что преобразование XML-файла было ошибкой:

Сравнение и просмотр job-XSLT можно использовать как обычно, поэтому сравните и просмотрите код, соответствующий классуJobEntryXSLT.java обнаружил, что он использует поток байтов, а XSLT при преобразовании использует поток символов StringReader:

Судя по реализации Job-XSLT и обращению к аномалии в Интернете, причиной проблемы является то, что несколько байтов, представляющих кодировку в начале файла XML, не могут быть правильно распознаны потоком символов как символы в файле XML.

Следовательно, чтобы решить эту проблему, вы можете прочитать XML-файл как поток байтов в соответствии с XSLT-обработкой XML в компоненте задания и, наконец, успешно выполнить.

I am performing a XSLT Transformation on an incoming Soap/http request in simple proxy service. I am getting the following Error.

Note:
i am using WSO2 ESB 4.8.1.

Error:

Unable to perform XSLT transformation using : Value {name ='null', keyValue ='gov:/xslt/Interface.xslt'} against source XPath : s11:Body/child::*[position()=1] | s12:Body/child::*[position()=1] reason : Unable to create an OMElement using XSLT result  {org.apache.synapse.mediators.transform.XSLTMediator}
org.apache.synapse.SynapseException: Unable to create an OMElement using XSLT result 
    at org.apache.synapse.mediators.transform.XSLTMediator.performXSLT(XSLTMediator.java:302)
    at org.apache.synapse.mediators.transform.XSLTMediator.mediate(XSLTMediator.java:191)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:166)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:411)
    at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:183)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.axiom.om.OMException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4,16]
Message: Content is not allowed in prolog.
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
    at org.apache.axiom.om.impl.llom.OMDocumentImpl.getOMDocumentElement(OMDocumentImpl.java:109)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:570)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.getDocumentElement(StAXOMBuilder.java:566)
    at org.apache.synapse.util.jaxp.StreamResultBuilder.getNode(StreamResultBuilder.java:87)
    at org.apache.synapse.mediators.transform.XSLTMediator.performXSLT(XSLTMediator.java:300)
    ... 12 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4,16]
Message: Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
    at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
    at org.apache.axiom.util.stax.dialect.SJSXPStreamReaderWrapper.next(SJSXPStreamReaderWrapper.java:138)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
    at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
    ... 17 more

XSLT File:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:con="http://com.example/cdm/contract/v1" xmlns:lic="http://com.example/cdm/license/v1" xmlns:org="http://com.example/cdm/organization/v1" xmlns:tns="http://com.example/cdm/order/v1" xmlns:tns1="http://com.example/cdm/customer/v1" xmlns:tns3="http://com.example/cdm/address/v1" xmlns:tns4="http://com.example/cdm/person/v1" xmlns:tns5="http://com.example/cdm/productoffer/v1" xmlns:tns6="http://com.example/cdm/product/v1" xmlns:tns7="http://com.example/cdm/productofferprice/v1" exclude-result-prefixes="tns tns1 tns4 tns3 tns5 tns6 tns7" version="1.0">
  <xsl:template match="/tns:OrderRequest">
    <tns:OrderRequest>
      <tns:Order>
        <tns:OrderHeader>
          <tns:OrderNumber>
            <xsl:value-of select="tns:OrderHeader/tns:OrderNumber" />
          </tns:OrderNumber>
            </tns:OrderHeader>
         </tns:Order>
    </tns:OrderRequest>
  </xsl:template>
</xsl:stylesheet>

Problem:
i don’t know what is wrong with my XSLT file. I don’t see anything in my prolog.

I’ve xml as below,

<?xml version="1.0" encoding="utf-16" ?> 
 <AllResidentAndUnitInfo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
 i:type="ResidentsByUnitInfo" xmlns="http://schemas.datacontract.org/2004/07/FSRSchema">
    <BillingAddresses>
      <BillingAddress>
        <billing_address1>Some address</billing_address1> 
        <billing_address2 /> 
        <billing_city>Gilbert</billing_city> 
        <billing_country i:nil="true"/> 
        <billing_dtmmodified>2010-12-08T01:37:41+05:30</billing_dtmmodified> 
        <billing_state>AZ</billing_state> 
        <billing_zipcode>23233</billing_zipcode>            
      </BillingAddress>
      <BillingAddress>
       <ResidentsByUnitInfoPropertyUnitBillingAddress>
        <billing_address1>Some address</billing_address1> 
        <billing_address2 /> 
        <billing_city>Gilbert</billing_city> 
        <billing_country i:nil="true"/> 
        <billing_dtmmodified>2010-12-08T01:37:41+05:30</billing_dtmmodified> 
        <billing_state>AZ</billing_state> 
        <billing_zipcode>23233</billing_zipcode> 
       </ResidentsByUnitInfoPropertyUnitBillingAddress>
      </BillingAddress>
      ....

</AllResidentAndUnitInfo>

I’m transforming into another xml format in C# using the XslCompiledTransform,

<?xml version='1.0' ?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
   xmlns:msxsl='urn:schemas-microsoft-com:xslt'
   xmlns:i='http://www.w3.org/2001/XMLSchema-instance' exclude-result-prefixes='msxsl  
   i' version='1.0'>
<xsl:output method='xml' indent='yes'/>
<xsl:template match='/AllResidentAndUnitInfo/BillingAddresses/BillingAddress'>
    <Root>
      <Address1>..</Address2>   
              ...
    </Root>
</xsl:template>
  </xsl:stylesheet>

I’m getting the error «Token Text in state Start would result in an invalid XML document. Make sure that the ConformanceLevel setting is set to ConformanceLevel.Fragment or ConformanceLevel.Auto if you want to write an XML fragment.» I understood the problem is with the i:nil attributes in the xml. Eventhough I included the namespace of them in XSLT still i’m getting the error.

asked Oct 3, 2011 at 11:39

VJAI's user avatar

0

I’m getting the error «Token Text in state Start would result in an
invalid XML document. Make sure that the ConformanceLevel setting is
set to ConformanceLevel.Fragment or ConformanceLevel.Auto if you want
to write an XML fragment.» I understood the problem is with the i:nil
attributes in the xml. Eventhough I included the namespace of them in
XSLT still i’m getting the error.

No. The problem is that the result isn’t a well-formed XML document and thus the XmlWriter, involved in producing the final serialization of the result tree to text, raises this exception.

Really, in your result you have two Root elements and none of them has a parent element.

You need to produce a well-formed document, or change the ConformanceLevel setting for the XmlWriter to ConformanceLevel.Fragment or ConformanceLevel.Auto.

To create a wellformed output, just add:

<xsl:template match="/">
 <top>
   <xsl:apply-templates/>
 </top>
</xsl:template>

KreepN's user avatar

KreepN

8,5281 gold badge40 silver badges58 bronze badges

answered Oct 3, 2011 at 13:06

Dimitre Novatchev's user avatar

Dimitre NovatchevDimitre Novatchev

240k26 gold badges292 silver badges429 bronze badges


Форум программистов Vingrad

Новости ·
Фриланс ·
FAQ

Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники

Форум -> Технологии и алгоритмы -> XML, XSL

Модераторы: diadiavova

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> XSLT 2.0 Ошибка преобразования!!! Браузер выводит ошибку преобразования 

:(

   

Опции темы

zeusakm
Дата 25.10.2008, 21:10 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

С xslt 1.0 работал все что выводил через Firefox запуская XML в котором цепляется таблица XSLT 1.0 версии работает все норм.
Тут попробовал то же самое с XSLT 2.0 ничего не выходит — пишет: 
Ошибка при XSLT преобразовании: Ошибка преобразования XSLT.
код XML такой:

Это сообщение отредактировал(а) zeusakm — 25.10.2008, 22:21

PM MAIL   Вверх
zeusakm
Дата 25.10.2008, 22:14 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

Код

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="nodes.xsl"?>
<doc>
    <heading>Oksana heading!!!</heading>
    <para>1.1</para>
    <para>1.2</para>
    <para>1.3</para>
    <heading>Arthur heading programmer</heading>
    <para>1.4</para>
    <para>1.5</para>
    <para>1.6</para>
    <heading>All other famalyes</heading>
    <para>1.7</para>
    <para>1.8</para>        
</doc>

Так же XSL код:

Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
        <xsl:template match="/doc">
            <xsl:for-each-group select="*" group-starting-with="heading">
                <xsl:apply-templates select="current-group()[self::para]"/>
            </xsl:for-each-group>
        </xsl:template>
    </xsl:stylesheet>

Наверняка для профи в xml/xslt, эта проблема — не проблема и решить ее можно легко. 
Так что буду рад Вашей поддержке =)

Это сообщение отредактировал(а) zeusakm — 25.10.2008, 23:43

PM MAIL   Вверх
zeusakm
Дата 26.10.2008, 10:16 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.6.2008

Репутация: нет
Всего: нет

Ппц 35 просмотров и ни одного ответа?! Видимо действительно для России XSLT 2.0 слишком новая технология. =)) 

PM MAIL   Вверх
JVM
Дата 26.10.2008, 15:40 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 189
Регистрация: 30.10.2006

Репутация: 4
Всего: 5

Ну конечно. Особенно если учесть, что для преобразования XML использовать Firefox — его же в России пишут.

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «XML/XSLT»
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском — возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »

Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему

[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]

Реклама на сайте
   
Информационное спонсорство

Есть много проблем с вашим кодом. Позвольте мне указать на некоторые из них.

В вашей таблице стилей XSLT

  • вы объявили нестандартный префикс для пространства имен XSLT: xmlns:wb="http://www.w3.org/1999/XSL/Transform", Хотя вы можете использовать любой префикс, который захотите, xsl является стандартом де-факто для него. Все остальное просто сбивает с толку.
  • вы не объявили пространство имен, которое присутствует во входном XML (http://www.w3.org/2001/XMLSchema-instance).
  • Кроме того, к сожалению, вы используете один и тот же префикс для обозначения разных URI пространства имен в таблице стилей XML и XSLT.
  • Вы ссылаетесь на wb:world даже если world элемент не имеет пространства имен
  • Ваша таблица стилей — версия 3.0, но ваш браузер поддерживает только 1.0, а XSLT 3.0 все еще находится в рабочем состоянии.
  • есть опечатка: vlaue-of который должен читать xsl:value-of

В вашем входном XML,

  • есть это объявление пространства имен: xmlns:wb="http://www.w3.org/2001/XMLSchema-instance", Опять же, это нестандартный префикс — вы должны использовать xsi, Однако я не уверен, собирались ли вы вообще использовать пространство имен для экземпляров схемы.

стилей

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">

   <xsl:template match="/">
     <html>
     <body>
       <h2>Name: <xsl:value-of select="world/wb:name" /></h2>
       <p><xsl:value-of select="world/wb:desc" /></p>
     </body>
     </html>
   </xsl:template>

</xsl:stylesheet>

Выход

desc пусто, поэтому внутри ничего не выводится p,

<html xmlns:wb="http://www.w3.org/2001/XMLSchema-instance">
   <body>
      <h2>Name: Arizelos</h2>
      <p>

      </p>
   </body>
</html>

Понравилась статья? Поделить с друзьями:
  • Ошибка при update ubuntu server
  • Ошибка при system32 drivers etc
  • Ошибка прекращена работа программы java
  • Ошибка прекращена работа программы internet explorer
  • Ошибка прекращена работа программы firefox