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