Проблема в использовании xpath с xslt, имеющим разные значения - PullRequest
1 голос
/ 01 апреля 2010

У меня есть XML как,

<items> 
  <item> 
    <products> 
      <product>laptop</product> 
      <product>charger</product> 
      <product>Cam</product>
    </products> 
  </item> 
  <item> 
    <products> 
      <product>laptop</product> 
      <product>headphones</product>  
      <product>Photoframe</product>  
    </products>   
  </item> 
  <item> 
    <products> 
      <product>laptop</product> 
      <product>charger</product>
      <product>Battery</product>   
    </products>   
  </item> 
</items> 

и я использую xslt

// не могу изменить xpath, поскольку он получен откуда-то еще

<xsl:param name="xparameter" select="items/item[products/product='laptop' and products/product='charger']"></xsl:param>

    <xsl:template match="/">

        <xsl:for-each select="$xparameter">

          <xsl:for-each select="products/product[not(.=preceding::product)]">
              <xsl:sort select="."></xsl:sort>
              <xsl:value-of select="." ></xsl:value-of>,
          </xsl:for-each>

          </xsl:for-each>

    </xsl:template>

Я хочу, чтобы вывод был

laptop
charger
cam
Battery

Но я не получаю результат, как я ожидаю ... разные значения работают нормально ... что-то не так, когда я добавляю это и пункт

1 Ответ

0 голосов
/ 01 апреля 2010

Вам необходимо отсортировать все узлы в наборе узлов - они вообще не являются братьями и сестрами .

Это преобразование:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:param name="xparameter" select="items/item[products/product='laptop' and products/product='charger']"></xsl:param>

  <xsl:template match="/">
    <xsl:for-each select="$xparameter/products/product">
     <xsl:variable name="vPos" select="position()"/>
     <xsl:if test="not(. = ($xparameter/products/product)[position() > $vPos])">
      <xsl:value-of select="concat(., ',')"/>
     </xsl:if>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

при применении к предоставленному XML-документу создает отдельный список значений :

Cam,laptop,charger,Battery,

Вам понадобится еще один проход, чтобы отсортировать их в требуемом порядке и убрать запятую .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...