我对XSLT还是很陌生,并且遇到了问题。我的代码如下:
<xsl:element name="relatedArticle1">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr,'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle2">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr[@Index = '2'],'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle3">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr[@Index = '3'],'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle4">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr[@Index = '4'],'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle5">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr[@Index = '5'],'-','')"/>
</xsl:element>
应该做什么:
应该给我
<relatedArticle1>2810000001</relatedArticle1>
<relatedArticle1>2810000002</relatedArticle1>
因为XML文件如下所示:
<CrossSelling>
<CSArtikel Index="1" BildNr="009710" ArtikelNr="281-00-00001" FabrikartikelNr="Shoe Clean 905768" />
<CSArtikel Index="2" BildNr="009709" ArtikelNr="281-00-00002" FabrikartikelNr="Combi Pflege Schaum 905859" />
<CSArtikel Index="3" BildNr="009713" ArtikelNr="062-00-00010" FabrikartikelNr="Nano Plus 906992" />
<CSArtikel Index="4" BildNr="009720" ArtikelNr="062-00-00011" FabrikartikelNr="906802" />
<CSArtikel Index="5" BildNr="008667" ArtikelNr="069-00-00008" FabrikartikelNr="Poliertuch 905856" />
</CrossSelling>
但不是。
所以[@Index = '3']
选择第3行f.e.不起作用。
如何更改代码,使其从不同的行获取?
答案 0 :(得分:1)
我强烈建议不要创建“计数”的元素名称。如果某事物有三个实例,例如“相关文章”,则它们属于同一类型。它们应该具有相同的名称。
“相关文章#3”不应为<relatedArticle3>
,而应为行中的第三个<relatedArticle>
。
除此之外,对于具有预定义名称的元素,您无需使用<xsl:element>
。只需直接写<element>
。
最后,您的方法太复杂了。使用<xsl:apply-templates>
和相对XPath,例如:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" />
<xsl:template match="/*">
<relatedArticles>
<xsl:apply-templates select="CSArtikel" />
</relatedArticles>
</xsl:template>
<xsl:template match="CSArtikel">
<relatedArticle>
<xsl:value-of select="@ArtikelNr" />
</relatedArticle>
</xsl:template>
</xsl:stylesheet>
结果为:
<relatedArticles>
<relatedArticle>281-00-00001</relatedArticle>
<relatedArticle>281-00-00002</relatedArticle>
<relatedArticle>062-00-00010</relatedArticle>
<relatedArticle>062-00-00011</relatedArticle>
<relatedArticle>069-00-00008</relatedArticle>
</relatedArticles>
如果您想从中获得第三篇文章,它就像/relatedArticles/relatedArticle[3]
一样容易,但是如果没有每个具有不同名称的元素,以后在上都会进行任何类型的XML处理< / em>更容易。
答案 1 :(得分:0)
好吧,我只是把它放在错误的位置。
这有效:
<xsl:element name="relatedArticle1">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel/@ArtikelNr,'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle2">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel[@Index = '2']/@ArtikelNr,'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle3">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel[@Index = '3']/@ArtikelNr,'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle4">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel[@Index = '4']/@ArtikelNr,'-','')"/>
</xsl:element>
<xsl:element name="relatedArticle5">
<xsl:value-of select="translate(ancestor-or-self::node()/CrossSelling/CSArtikel[@Index = '5']/@ArtikelNr,'-','')"/>
</xsl:element>