2015-06-01 9 views
0

Я пытаюсь преобразовать XML-документ в PHP с XSLT-процессором, но я ничего не могу выбрать ... Я думаю, что это проблема пространства имен. Если я начинаю с чистого листа <products>, трансформация работает правильно.XSLT Transformation, неправильное пространство имен

inputxml:

<?xml version="1.0" encoding="utf-8"?> 
<products xmlns="http://***.net/schemata/base" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://***.net/schemata/base/products.xsd"> 
    <product ean="4260094730238" eol="false" model="1090017" status="true"> 
     <ean>4260094730238</ean> 
     <eol>false</eol> 
     <group>screens</group> 
     <model>1090017</model>  
     <status>true</status> 
    </product> 
</products> 

Xsl-файл:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <ARTICLE> 
      <SUPPLIER_AID> 
       <xsl:value-of select="products/product/ean" /> 
      </SUPPLIER_AID> 
     </ARTICLE> 
    </xsl:template> 
</xsl:stylesheet> 

Я не могу изменить файл_ввода, потому что она порождается другой программе.

Andre

ответ

1

Изменить ваш XSLT использовать пространство имен по умолчанию из входного XML, например:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:my="http://***.net/schemata/base" exclude-result-prefixes="my"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
    <ARTICLE> 
     <SUPPLIER_AID> 
      <xsl:value-of select="my:products/my:product/my:ean" /> 
     </SUPPLIER_AID> 
    </ARTICLE> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Спасибо. Прекрасно подходит для меня. – Andre

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