2

我在变量 prdxml中有这样的 XML

 <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 的产品节点,而不使用 for 循环。任何人都可以提供任何线索

4

2 回答 2

4
/root/product[id='8143794']

这就是说“找到 /root/product ,其中“产品”的“id”元素子元素是 8143794”

关于如何在未来的查询中使用该变量有一个答案:XSL: How best to store a node in a variable and then us in future xpath expressions?

于 2013-04-03T14:20:05.817 回答
2

好吧,对于 XSLT 1.0,我们真的需要知道命名变量的类型prdxmlnode-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"/>
于 2013-04-03T14:28:43.367 回答