2014-02-18 7 views
0

Я очень новичок в XML и XSLT. Я пытаюсь «преобразовать» XML-документ с помощью xslt. К сожалению, это работает неправильно. Я получаю следующую ошибку: «Ошибка при преобразовании XSLT: преобразование XSLT не удалось». в FireFox при попытке загрузить файл xml. Chrome просто загружает пустую страницу. Файлы XML и XSLT загружаются в браузере независимо друг от друга, указывая, что они оба хорошо сформированы. Вот файл XSL:XSLT Transformation ERROR

<wb:stylesheet version="3.0" 
xmlns:wb="http://www.w3.org/1999/XSL/Transform"> 

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

</wb:stylesheet> 

и здесь является XML-файл:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="./world.xsl"?> 
<world 
xmlns:wb="http://www.w3.org/2001/XMLSchema-instance" 
wb:schemaLocation="./ world.xsd"> 
    <wb:name>Arizelos</wb:name> 
    <wb:desc> 
    </wb:desc> 
    <wb:nation> 
     <wb:name>Whatever</wb:name> 
     <wb:map>map01.png</wb:map> 
     <wb:number>1</wb:number> 
     <wb:desc>Whatever</wb:desc>  
     <wb:county> 
      <wb:name>Whatever</wb:name> 
      <wb:size>City-State</wb:size> 
      <wb:number>1</wb:number> 
      <wb:desc>Whatever</wb:desc>  
      <wb:community> 
       <wb:name>Test</wb:name> 
       <wb:size>City</wb:size> 
       <wb:number>1</wb:number> 
       <wb:desc>Whatever</wb:desc>  
       <wb:profession> 
        <wb:name>Sorcerer</wb:name> 
        <wb:number>1</wb:number> 
        <wb:desc>Whatever</wb:desc>  
        <wb:person> 
         <wb:name>Harry Potter</wb:name> 
         <wb:number>1</wb:number> 
         <wb:desc>Whatever</wb:desc> 
         <wb:charsheet> 
         </wb:charsheet> 
        </wb:person> 
       </wb:profession> 
      </wb:community> 
     </wb:county> 
    </wb:nation> 
    <wb:religion> 
     <wb:name>Phony</wb:name> 
     <wb:desc>But aren't they all?</wb:desc> 
     <wb:deity> 
      <wb:name>John Doe</wb:name> 
      <wb:gender>Male</wb:gender> 
      <wb:desc>I never considered him divine</wb:desc> 
     </wb:deity> 
    </wb:religion> 
</world> 

Заранее спасибо за любую помощь, предоставляемое :)

+0

Значение не указано правильно. –

+1

1. Кроме того, в вашем исходном XML для вы не указали какой-либо префикс пространства имен, но используете префикс в xpath. 2. Вы должны объявить пространства имен перед использованием префиксов в xpath в XSLT. –

ответ

0

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

В вашей таблице стилей 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> 
Смежные вопросы