2013-04-03 4 views
2

У меня есть XML, как это в переменной prdxmlВыберите конкретный элемент из XML с помощью XSLT

<root> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8142229</id> 
    <isp_brand extra="isp_brand"></isp_brand> 
    <isp_produktserie extra="isp_produktserie"></isp_produktserie> 
    <isp_model extra="isp_model"></isp_model> 
    </product> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8143793</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Bred</isp_model> 
    </product> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8143794</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Smal</isp_model> 
    </product> 
    <product> 
    <id>8143796</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Smal</isp_model> 
    </product> 
</root> 

Я хочу, чтобы выбрать узел продукта, где ID = 8143794 от этого, с, используя цикл. может ли один дать любой ключ

ответ

2

Ну с XSLT 1.0, мы действительно должны знать, является ли тип переменной с именем prdxml является node-set или result tree fragment.

Если это набор узлов, вы можете просто выбрать $prdxml/root/product[id = 8143794]. но если у вас есть фрагмент результирующего дерева, вам сначала нужно применить функцию расширения, например exsl:node-set, например. exsl:node-set($prdxml)/root/product[id = 8143794].

Итак, проверьте, где/как задана переменная, если у вас есть, например,

<xsl:variable name="prdxml" select="document('products.xml')"/> 

У вас есть набор узлов, однако, например, с помощью, например,

<xsl:variable name="prdxml"> 
<root> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8142229</id> 
    <isp_brand extra="isp_brand"></isp_brand> 
    <isp_produktserie extra="isp_produktserie"></isp_produktserie> 
    <isp_model extra="isp_model"></isp_model> 
    </product> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8143793</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Bred</isp_model> 
    </product> 
    <product> 
    <estocklevel>0</estocklevel> 
    <id>8143794</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Smal</isp_model> 
    </product> 
    <product> 
    <id>8143796</id> 
    <isp_brand extra="isp_brand">Leitz</isp_brand> 
    <isp_produktserie extra="isp_produktserie">180</isp_produktserie> 
    <isp_model extra="isp_model">Smal</isp_model> 
    </product> 
</root> 
</xsl:variable> 

у вас есть фрагмент результирующего дерева и нужен второй подход (и поддержка exsl:node-set или аналогичные):

<xsl:variable name="prod" select="exsl:node-set($prdxml)/root/product[id = 8143794]" xmlns:exsl="http://exslt.org/common"/> 
Смежные вопросы