2015-07-23 2 views
0

Я получаю эту ошибку при попытке конвертировать XML-документ с помощью XSL. Я только что начал кодирование с помощью XML, поэтому я уверен, что мне не хватает чего-то простого, но, похоже, он не нашел много информации об этом в Интернете.XML to XSL Ошибка загрузки таблицы стилей: не удалось изменить таблицу стилей XSLT

Booklist.XML 
<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="booklist.xsl"?> 

<CATALOG> 

<BOOK> 
    <NAME> 
     <TITLE>Caring for Sheep</TITLE> 
    </NAME> 
    <PAGES> 60 </PAGES> 
    <PRICE>$34.99</PRICE> 
</BOOK> 

</CATALOG> 

И мой XSL Файл:

Booklist.XSL 

<?xml version="1.0"?> 
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE"> 
<xsl:for-each select="CATALOG/BOOK/NAME"> 
    <div style="background-color:teal;color:white;padding:4px"> 
    <a href="details.html"><xsl:value-of select="name">;</a> 
    </div> 
</xsl:for-each> 

<xsl:for-each select="CATALOG/BOOK"> 
    <div style="background-color:teal;color:white;padding:4px"> 

    </div> 
</xsl:for-each> 

</body> 

Может кто-нибудь увидеть здесь ошибку?

+0

Если ваш XSL-файл имеет имя «Booklist.XSL», но ваш XML-документ относится к нему как «booklist.xsl», и вы используете чувствительную к типу файловую систему, что может объяснить проблему. В противном случае, пожалуйста, сообщите нам, какая программа вы используете, что дает указанную вами ошибку? В частности, вы вызываете XSLT-процессор и предоставляете ему XSL-файл? – LarsH

+0

Основная проблема с вашим новым XSL-файлом заключается в том, что это не таблица стилей XSLT. –

+0

Вам просто нужно пространство имен xslt "" –

ответ

0

Вы как бы смешаете упрощенный синтаксис Literal Result Element as Stylesheet с регулярным синтаксисом, поставив литеральный элемент результата <body> вне любого шаблона, но не на верхнем уровне. Если вы хотите использовать этот упрощенный синтаксис, избавитесь от элементов <xsl:stylesheet> и <xsl:output>, так что <body> находится на верхнем уровне.

Кроме того, XML и XPath чувствительны к регистру в отношении имен элементов, поэтому вам необходимо исправить несогласованность между, например, «каталог» и <CATALOG>.

+0

Большое вам спасибо! Я внес изменения, которые вы предложили, но ничего не получаешь. Я обновил свой код, вы можете увидеть что-нибудь еще, что может вызвать это? Спасибо кучи – Timbats1993

+0

В строке 8 есть также закрытый элемент 'xsl: value-of'. –

0

Ну, если по каким-то причинам, которые трудно понять, упрощенный синтаксис не работает для вас, я бы предложил использовать «нормальное кодирование», что было бы что-то подобное в вашем случае:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="1.0"> 

    <xsl:template match="/"> 
     <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE"> 
     <xsl:for-each select="/CATALOG/BOOK/NAME"> 
      <div style="background-color:teal;color:white;padding:4px"> 
       <a href="details.html"><xsl:value-of select="name"/></a> 
      </div> 
     </xsl:for-each> 

     <xsl:for-each select="/CATALOG/BOOK"> 
      <div style="background-color:teal;color:white;padding:4px"> 

      </div> 
     </xsl:for-each> 

    </body> 
    </xsl:template> 
</xsl:stylesheet> 
Смежные вопросы