XSLT Transformation ERROR
Я очень плохо знаком с XML и XSLT. Я пытаюсь "преобразовать" документ XML с помощью xslt. К сожалению, это не работает правильно. Я получаю следующую ошибку: "Ошибка при преобразовании XSLT: Ошибка преобразования XSLT". в FireFox при попытке загрузить XML-файл. Chrome просто загружает пустую страницу. Файлы XML и XSLT загружаются в браузер независимо, что указывает на то, что они хорошо сформированы. Вот файл XSL:
<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>
Заранее спасибо за любую помощь, оказанную:)
1 ответ
Есть много проблем с вашим кодом. Позвольте мне указать на некоторые из них.
В вашей таблице стилей 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>