XSLT样式表中不需要的节点
我不完全确定我的样式表当前的错误在哪里:XSLT样式表中不需要的节点,xslt,stylesheet,xslt-2.0,saxon,exslt,Xslt,Stylesheet,Xslt 2.0,Saxon,Exslt,我不完全确定我的样式表当前的错误在哪里: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet exclude-result-prefixes="exsl xs" extension-element-prefixes="exsl" version="2.0" xmlns:exsl="http://exslt.org/common" xmlns:xs="http://www.w3.org/2001/XMLSchema" xm
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="exsl xs"
extension-element-prefixes="exsl" version="2.0"
xmlns:exsl="http://exslt.org/common"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--xsl:import-schema schema-location="ProductFeed5.6.xsd" / -->
<xsl:output method="xml" indent="yes" encoding="UTF-8"
byte-order-mark="no" omit-xml-declaration="no"
xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6" />
<xsl:strip-space elements="*" />
<!-- Parameter to determine when using 'contoursbaby' or 'kolcraft' feed
values -->
<xsl:param name="feedName" as="xs:string" />
<!-- copy all nodes that do not match a given template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="/*">
<xsl:choose>
<xsl:when test="starts-with(name(), 'dataroot_')">
<xsl:element name="Feed" namespace="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6">
<xsl:attribute name="name" select="$feedName" />
<xsl:attribute name="incremental" select="'false'" />
<xsl:attribute name="extractDate"><xsl:value-of select='current-dateTime()' /></xsl:attribute>
<xsl:if test="not(empty($feedName))">
<xsl:choose>
<xsl:when test="$feedName eq 'kolcraft'">
<xsl:copy-of select="exsl:node-set(document('kolcraft-brands.xml'))" />
<xsl:copy-of select="exsl:node-set(document('kolcraft-categories.xml'))" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="document('contours-categories.xml')" />
</xsl:otherwise>
</xsl:choose>
<xsl:copy>
<xsl:apply-templates select="recordset" />
</xsl:copy>
</xsl:if>
</xsl:element>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="recordset">
<Products>
<xsl:for-each select="row">
<Product>
<xsl:attribute name="removed" select="'false'" />
<xsl:apply-templates select="@*|node()" />
</Product>
</xsl:for-each>
</Products>
</xsl:template>
<xsl:template match="F1">
<ExternalId><xsl:value-of select="." /></ExternalId>
</xsl:template>
<xsl:template match="F2">
<UPCs>
<UPC><xsl:value-of select="." /></UPC>
</UPCs>
</xsl:template>
<xsl:template match="F3">
<Name><xsl:value-of select="." /></Name>
</xsl:template>
<xsl:template match="F4">
<Description><xsl:value-of select="." /></Description>
</xsl:template>
<xsl:template match="F5">
<ProductPageUrl><xsl:value-of select="." /></ProductPageUrl>
</xsl:template>
<xsl:template match="F6">
<ImageUrl><xsl:value-of select="." /></ImageUrl>
</xsl:template>
<xsl:template match="F7">
<CategoryExternalId><xsl:value-of select="lower-case(normalize-space(replace(., '[/ ]', '-')))" /></CategoryExternalId>
</xsl:template>
<xsl:template match="fielddescription" />
</xsl:stylesheet>
我有两个问题,我不知道为什么会发生:
1. <代码>&
在导入时获得的命名空间为空
2. <代码>继续显示为根
的第一个子级
以下是其使用的源文档类型的片段:
<?xml version="1.0" encoding="ISO-8859-1"?>
<dataroot_r00295>
<fielddescription>
<F1>ExternalID</F1>
<F2>UPC</F2>
<F3>Name</F3>
<F4>Description</F4>
<F5>ProductPageUrl</F5>
<F6>ProductImageUrl</F6>
<F7>CategoryExternalID</F7>
</fielddescription>
<recordset>
<row>
<F1>ED003-QCX</F1>
<F2>031878025147</F2>
<F3>Sealy Naturals-Cotton Crib Mattress Pad</F3>
<F4>Give baby plush comfort from natural cotton fibers with the innovative Sealy Naturals-Cotton Crib Mattress Pad.</F4>
<F5>http://www.kolcraft.com/sealy-naturals-cotton-crib-mattress-pad.html</F5>
<F6>http://www.kolcraft.com/media/catalog/product/e/d/ed003-qcx-1_1_4.jpg</F6>
<F7>Bedding/Pads</F7>
</row>
</recordset>
</dataroot_r00295>
外部的
UPC
名称
描述
ProductPageUrl
ProductImageUrl
类别外盖
ED003-QCX
031878025147
Sealy Naturals棉质婴儿床床垫
采用创新的Sealy Naturals棉质婴儿床床垫,使用天然棉纤维为宝宝提供柔软舒适的穿着体验。
http://www.kolcraft.com/sealy-naturals-cotton-crib-mattress-pad.html
http://www.kolcraft.com/media/catalog/product/e/d/ed003-qcx-1_1_4.jpg
床上用品/垫子
下面是它产生的一个片段:
<?xml version="1.0" encoding="UTF-8"?>
<Feed extractDate="2016-05-05T19:32:27.863-05:00"
incremental="false"
name="kolcraft"
xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6">
<Brands xmlns="">
<Brand removed="false">
<ExternalId>brands</ExternalId>
<Name>Brands</Name>
<!--BrandPageUrl>http://www.kolcraft.com/brands.html</BrandPageUrl -->
</Brand>
</Brands>
<Categories xmlns="">
<Category removed="false">
<ExternalId>baby-products</ExternalId>
<Name>Baby Products</Name>
<CategoryPageUrl>http://www.kolcraft.com/baby-products.html</CategoryPageUrl>
</Category>
</Categories>
<dataroot_r00295 xmlns="">
<Products>
<Product removed="false">
<ExternalId>ED003-QCX</ExternalId>
<UPCs>
<UPC>031878025147</UPC>
</UPCs>
<Name>Sealy Naturals-Cotton Crib Mattress Pad</Name>
<Description>
Give baby plush comfort from natural cotton fibers with the innovative Sealy Naturals-Cotton
Crib Mattress Pad.
</Description>
<ProductPageUrl>http://www.kolcraft.com/sealy-naturals-cotton-crib-mattress-pad.html</ProductPageUrl>
<ImageUrl>http://www.kolcraft.com/media/catalog/product/e/d/ed003-qcx-1_1_4.jpg</ImageUrl>
<CategoryExternalId>bedding-pads</CategoryExternalId>
</Product>
</Products>
</dataroot_r00295>
</Feed>
品牌
品牌
婴儿用品
婴儿用品
http://www.kolcraft.com/baby-products.html
ED003-QCX
031878025147
Sealy Naturals棉质婴儿床床垫
采用创新的Sealy Naturals棉制成的天然棉纤维,为宝宝带来柔软舒适的穿着体验
婴儿床床垫。
http://www.kolcraft.com/sealy-naturals-cotton-crib-mattress-pad.html
http://www.kolcraft.com/media/catalog/product/e/d/ed003-qcx-1_1_4.jpg
床垫
有人能解释一下我的样式表出了什么问题吗?我被难住了
另外:如果还有其他更有效地使用模板的方法,请随意教我如何正确使用XSLT。一般来说,如果您想创建一个XML文档,其中结果元素应该全部位于某个名称空间中,那么正确且方便的方法是将该名称空间的名称空间声明分别放在样式表的
xsl:stylesheet
根元素上,即
<xsl:stylesheet
exclude-result-prefixes="exsl xs"
version="2.0"
xmlns:exsl="http://exslt.org/common"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.bazaarvoice.com/xs/PRR/ProductFeed/5.6">
您正在从其他文档中提取数据,我们在这里看不到这些文档,这可能是
和
派生的,它们没有像您使用
那样定义名称空间,我添加了这些文档包含的片段;
和
是这些包含的一部分。我实际上已经解决了第二个问题,所以这解决了所有问题:)谢谢!我不知道进口就是这样运作的
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>