我有一个来自ICECAT的大型xml文件。我只想要一些信息。这是本主题的以下内容filter-dynamically-xml-child-element-with-xslt-with-ssis
现在我有一个categoriesList XML文件,如下所示:
<ICECAT-interface>
<Response Date="Tue Jul 25 16:00:10 2017" ID="29306604" Request_ID="1500991209" Status="1">
<CategoriesList>
<Category ID="2597" LowPic="http://images.icecat.biz/img/low_pic/2597-5095.jpg" Score="471102" Searchable="0" ThumbPic="http://images.icecat.biz/thumbs/CAT2597.jpg" UNCATID="43223323" Visible="0">
<Name ID="1088701" Value="fiber optic adapters" langid="1"/>
<Name ID="1595015" Value="glasvezeladapters" langid="2"/>
<Name ID="1088703" Value="adaptateurs de fibres optiques" langid="3"/>
<Name ID="1245208" Value="LWL-Steckverbinder" langid="4"/>
<Name ID="1088705" Value="adattatori di fibra ottica" langid="5"/>
<Name ID="1125574" Value="adaptadores de fibra óptica" langid="6"/>
<Name ID="1147616" Value="lyslederadapter" langid="7"/>
<ParentCategory ID="242">
<Names>
<Name ID="485" langid="1">networking</Name>
<Name ID="471244" langid="2">netwerken</Name>
<Name ID="343986" langid="3">réseaux</Name>
<Name ID="436999" langid="4">Netzwerke</Name>
<Name ID="1051724" langid="5">reti</Name>
<Name ID="1041258" langid="6">redes</Name>
<Name ID="34261" langid="7">netværk</Name>
<Name ID="530435" langid="8">сети/коммуникации</Name>
</Names>
</ParentCategory>
</Category>
<Category ID="4601" LowPic="http://images.icecat.biz/img/low_pic/4601-990.jpg" Score="12621" Searchable="0" ThumbPic="http://images.icecat.biz/thumbs/CAT4601.jpg" UNCATID="56101688" Visible="0">
我需要Category
节点中的某些属性,例如ID
,LowPic
...某些Name
节点和ID
节点中的ParentCategory
我试过这个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="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/ICECAT-interface">
<xsl:apply-templates select="Response"/>
</xsl:template>
<xsl:template match="Response">
<xsl:apply-templates select="CategoriesList"/>
</xsl:template>
<xsl:template match="CategoriesList">
<xsl:copy>
<xsl:apply-templates select="Category"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Category">
<xsl:apply-templates select="Name"/>
</xsl:template>
<xsl:template match="Name[@langid=1 or @langid=3]">
<Category>
<xsl:copy-of select="../@ID|../@LowPic|../@ThumbPic|../@UNCATID||@langid|@Value" />
</Category>
</xsl:template>
</xsl:stylesheet>
我不知道这是否是更好的方法,而且我没有ID
节点的ParentCategory
。
更新 对不起,我忘记了我想要的结果
<?xml version="1.0" encoding="utf-8"?>
<Categories>
<Category ID="2597" LowPic="http://images.icecat.biz/img/low_pic/2597-5095.jpg" ThumbPic="http://images.icecat.biz/thumbs/CAT2597.jpg" UNCATID="43223323" name="fiber optic adapters" langid="1" ParentCategory="242"/>
<Category ID="2597" LowPic="http://images.icecat.biz/img/low_pic/2597-5095.jpg" ThumbPic="http://images.icecat.biz/thumbs/CAT2597.jpg" UNCATID="43223323" name="adaptateurs de fibres optiques" langid="3" ParentCategory="242"/>
....
更新2 我修改了XSLT文件,我反过来我的过滤器位置。现在我有货物记录,只是父类别id的湖泊
答案 0 :(得分:1)
看起来您希望为每个Category
输出Name
langid
属性为1或3.在这种情况下,您需要将条件移至{{1 }}
xsl:apply-templates
然后,在匹配<xsl:template match="Category">
<xsl:apply-templates select="Name[@langid=1 or @langid=3]"/>
</xsl:template>
的模板中,您可以像这样为ParentCategoryId创建一个属性
Name
同样适用于 <xsl:attribute name="ParentCategoryId">
<xsl:value-of select="following-sibling::ParentCategory[1]/@ID" />
</xsl:attribute>
属性。
试试这个XSLT
Name
注意,您可以使用属性值模板
简化<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/ICECAT-interface">
<xsl:apply-templates select="Response"/>
</xsl:template>
<xsl:template match="Response">
<xsl:apply-templates select="CategoriesList"/>
</xsl:template>
<xsl:template match="CategoriesList">
<xsl:copy>
<xsl:apply-templates select="Category"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Category">
<xsl:apply-templates select="Name[@langid=1 or @langid=3]"/>
</xsl:template>
<xsl:template match="Name">
<Category>
<xsl:copy-of select="../@ID|../@LowPic|../@ThumbPic|../@UNCATID|@langid" />
<xsl:attribute name="Name">
<xsl:value-of select="@Value" />
</xsl:attribute>
<xsl:attribute name="ParentCategoryId">
<xsl:value-of select="following-sibling::ParentCategory[1]/@ID" />
</xsl:attribute>
</Category>
</xsl:template>
</xsl:stylesheet>
模板
Name