2016-08-26 3 views
0

以下のxmlはxmlnsのために変換されていません。xmlnsなしで試しましたが、期待どおりに動作しました。私はxmlnsで入力を受け取ります。どのように私はそれを克服することができます提案してください。xmlnsのためにxmlを変換できません

要件:xmlからproductBenefitHeadersを取得する。

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<productData xmlns="http://www.example.org/consolidated"> 
<productResponse> 
    <product> 
     <status> 
      <isError>false</isError> 
     </status> 
     <productBenefit> 
      <productBenefitCategory>CARDs</productBenefitCategory> 
      <productBenefitId>12AA</productBenefitId> 
      <productBenefitHeader>Philips</productBenefitHeader> 
     </productBenefit> 
     <productBenefit> 
      <productBenefitCategory>CARDs</productBenefitCategory> 
      <productBenefitId>12AB</productBenefitId> 
      <productBenefitHeader>Samsung</productBenefitHeader> 
     </productBenefit> 
    </product> 
</productResponse> 
<productData> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes" encoding="UTF-8" omit-xml-declaration="no"/> 
<xsl:template match="/"> 
<xsl:for-each select="productData/productResponse/product/productBenefit">   
<xsl:value-of select="productBenefitHeader"/> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 
+0

サイトで「デフォルトの名前空間」を検索してみてください。 –

+1

(たとえば)を参照してください:http://stackoverflow.com/questions/34758492/xslt-transform-doesnt-work-until-i-remove-root-node/34762628#34762628 –

答えて

1

ソースXMLの要素は、名前空間http://www.example.org/consolidatedです。名前空間を指定せずに要素を検索している間。

名前空間を検索するには、スタイルシートタグに名前空間を追加し、その接頭辞を設定する必要があります。この場合、私は 'pref'を使用しました。

xmlns:pref="http://www.example.org/consolidated" 

これで、xslの接頭辞を使用して、探している要素を指定できます。これはxslですが、接頭辞が追加されています。

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:pref="http://www.example.org/consolidated"> 
<xsl:output method="html" indent="yes" encoding="UTF-8" omit-xml-declaration="no"/> 
    <xsl:template match="/"> 
    <xsl:for-each select="pref:productData/pref:productResponse/pref:product/pref:productBenefit">   
    <xsl:value-of select="pref:productBenefitHeader"/> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

また、終了タグが正しいことを確認してください。現在、サンプルxmlの最後のタグは終了タグではありません。

関連する問題