[英]xsl:value-of select from a specific line XSLT
我對 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 行 fe 不起作用。
我如何更改代碼以便它從不同的行獲取?
我強烈不建議創建“計數”克萊門特名稱。 如果一個事物有三個實例,比如“相關文章”,那么它們屬於同一類型。 它們應該具有相同的名稱。
“相關文章 #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 處理以后更容易。
好的,我只是把它弄錯了 position。
這有效:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.