я использую IE 11 и Firefox для тестированияпреобразования XML с помощью XSL с пространством имен
следующие прекрасно работает:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="LEDES21Basic.xslt" type="text/xsl"?>
<ledesxml>
<firm>
<lf_vendor_id>GB 12 345 6789</lf_vendor_id>
<lf_id>FR12-3456789</lf_id>
<lf_name>Alpha & Beta, LLC</lf_name>
</firm>
</ledesxml>
со следующей таблицей стилей
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="/ledesxml/firm/lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
но, мой реальный файл XML это:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="LEDES21Basic.xslt" type="text/xsl"?>
<ledesxml xmlns="http://www.ledes.org/ledes2000.xsd">
<firm>
<lf_vendor_id>GB 12 345 6789</lf_vendor_id>
<lf_id>FR12-3456789</lf_id>
<lf_name>Alpha & Beta, LLC</lf_name>
</firm>
</ledesxml>
Вы отмечаете пространство имен. предыдущая таблица стилей не может преобразовать xml. Стараюсь две вещи: меняю выражение XPath, используйте атрибут XPath-умолчанию-имен:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="t:/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="t:/ledesxml/firm/lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
оба терпят неудачу. Firefox говорит: ошибка анализа выражения xpath.
==== следующая попытка ================================================================================================== не ================
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:t="http://www.ledes.org/ledes2000.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Acounting document</title>
</head>
<body>
<p>BODY</p>
<xsl:value-of select="/t:ledesxml/t:firm/t:lf_name"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
не больше ошибок, но XPath не ожидаемый результат: lf_name не трансформируется.
Что я могу сделать, чтобы преобразовать свой XML-файл без удаления пространства имен?
не более xpath ошибка (спасибо), но все еще не отображается. Результирующее преобразование содержит только
BODY
– tschmit007Является ли пространство имен во входном XML по-настоящему «xmlns =» http://www.ledes.org/ledes2000.xsd> «'? В этом случае, конечно, XSLT также нуждается в 'xmlns: t =" http://www.ledes.org/ledes2000.xsd> "'. –
Да, оба файла имеют '' or'xmlns: t = "http://www.ledes.org/ledes2000.xsd" ' –
tschmit007