簡體   English   中英

XSLT動態xpath子選擇

[英]XSLT dynamic xpath child selection

我需要通過給定的路徑遞歸選擇子項。 這是我的XML結構:

<items>
   <item name="first">
      <item name="fist-first">
         [...]
      </item>
      <item name="first-second">
         [...]
      </item>
      [...]
   </item>
</items>

我需要按xsl:param傳遞的路徑選擇特定項(例如選擇“ 0-1”以選擇第一個元素的第二個子項)。 我有一個字符串,表示有關其子位置的實際節點路徑。

有人知道這是否可行並給我一些幫助嗎?

我使用撒克遜9.8he。

提前致謝

使用Saxon 9.8和XSLT 3.0,您可以在路徑表達式中使用靜態參數

<xsl:param name="path" static="yes" as="xs:string" select="'/items/item[1]/item[2]'"/>

以及要使用該路徑的地方,您將不使用普通的select屬性,而是使用相應的shadow屬性 _select="{$path}"例如

<xsl:template match="/">
  <xsl:copy-of _select="{$path}"/>
</xsl:template>

然后,您可以像其他任何參數一樣在運行樣式表時設置該參數。

首先使用tokenize()函數將$path轉換為正整數序列,例如(1,4,6),然后調用此遞歸函數:

<xsl:function name="f:by-path" as="element()?">
 <xsl:param name="origin" as="element()*"/>
 <xsl:param name="path" as="xs:integer*"/>
 <xsl:sequence select="
     if (empty($path)) 
     then $origin 
     else $origin[head($path)]/f:by-path(*, tail($path))"/>
</xsl:function>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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