由于xmlns,无法转换xml

时间:2016-08-26 12:59:53

标签: xslt

由于xmlns,下面的xml没有转换,我试过没有xmlns,它按预期工作。但我收到xmlns的输入。请建议我如何克服它。

要求:从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>

1 个答案:

答案 0 :(得分:1)

源xml中的元素位于命名空间http://www.example.org/consolidated中。在不指定命名空间的情况下搜索元素时。

要使用命名空间进行搜索,您需要在样式表标记中添加命名空间并为其设置前缀,在这种情况下,我使用了&#39; pref&#39;。

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中的最后一个标记不是结束标记。