簡體   English   中英

xsl:value-of select 來自特定行 XSLT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM