2014-12-12 3 views
0

я использую 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 &amp; 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 &amp; 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-файл без удаления пространства имен?

ответ

1

xpath-default-namespace работает только с процессорами XSLT 2.0, такими как Saxon 9, Saxon CE, XmlPrime, Altova, браузер поддерживает только XSLT 1.0. Что касается использования префикса, да, это правильный подход, но правильный синтаксис - это префикс любого имени элемента, как в <xsl:value-of select="/t:ledesxml/t:firm/t:lf_name"/>. И оставить match="/" как есть, префикс используется только в квалифицированных именах.

+0

не более xpath ошибка (спасибо), но все еще не отображается. Результирующее преобразование содержит только

BODY

tschmit007

+0

Является ли пространство имен во входном XML по-настоящему «xmlns =» http://www.ledes.org/ledes2000.xsd> «'? В этом случае, конечно, XSLT также нуждается в 'xmlns: t =" http://www.ledes.org/ledes2000.xsd> "'. –

+0

Да, оба файла имеют '' or'xmlns: t = "http://www.ledes.org/ledes2000.xsd" ' – tschmit007

Смежные вопросы