1

va変数prdxmlでこのようなXMLを取得しました

  <category numberofproducts="0">
  <id>catering</id>
  <url>/products/kantine</url>
  <name>Kantine</name>
  <category numberofproducts="0">
    <id>madembal</id>
    <url>/products/mad-og-emballage</url>
    <name>Mad og emballage</name>
    <category numberofproducts="9">
      <id>stanniol</id>
      <url>/products/stanniol</url>
      <name>Stanniol</name>
      <category  numberofproducts="9">
        <id>stankd</id>
        <url>/products/stankd</url>
        <name>stankd</name>
      </category>
    </category>
    <category numberofproducts="5">
      <id>termo</id>
      <url>/products/termobakker</url>
      <name>Termobakker</name>
    </category>
  </category>
</category>

ここで、この xml に存在するすべての ID を文字列に取得したいと考えています。通常の for-each ループを試行しましたが、この xml の構造のために失敗しました。今、私はこれを達成するためのよりスマートな方法があるかもしれないと考えていますが、それは私が知らなかったものです。

4

1 に答える 1

1

ネストやレベルに関係なくすべてをフラット化する場合はid、間に区切り文字「,」を使用して機能するはずです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <xsl:apply-templates select="//id"/>
  </xsl:template>

  <xsl:template match="id">
    <xsl:value-of select="concat(./text(), ',')"/>
  </xsl:template>

</xsl:stylesheet>

戻り値 :catering,madembal,stanniol,stankd,termo,

最後の要素区切り文字を処理するためのより洗練されたメカニズムが必要な場合は、Dimitre の回答をご覧ください。

更新:結果を変数に入れるには:

<xsl:variable name="someVar">
  <xsl:apply-templates select="//id"/>
</xsl:variable>
Result: <xsl:value-of select="$someVar"/>
于 2013-05-17T13:21:30.160 に答える