Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT基于属性值从两个同名节点中选择一个_Xml_Xslt - Fatal编程技术网

Xml XSLT基于属性值从两个同名节点中选择一个

Xml XSLT基于属性值从两个同名节点中选择一个,xml,xslt,Xml,Xslt,我有一些XML标记,如下所示: <pet type="dog" id="76"> </pet> <pet type="cat" id="79"> </pet> 我想试试这样的 <xsl:variable name="cat_id"><xsl:value-of select="pet[@type='cat']/@id "/ ></xsl:variable> 但这也取决于您在输入xml中的实际位置。如果您想要

我有一些XML标记,如下所示:

<pet type="dog" id="76">
</pet>
<pet type="cat" id="79">
</pet>

我想试试这样的

<xsl:variable name="cat_id"><xsl:value-of select="pet[@type='cat']/@id "/ ></xsl:variable>

但这也取决于您在输入xml中的实际位置。

如果您想要高效访问,那么定义一个键是最直接的方法

<xsl:key name="pet-by-type" match="pet" use="@type"/>

然后使用

<xsl:variable name="cat_id" select="key('pet-by-type', 'cat')/@id"/>


.

不是答案,只是需要注意的是,通常应避免
元素只包含一个
——只使用
更有效,因为这样可以避免创建文本节点和树片段。
<xsl:variable name="cat_id" select="key('pet-by-type', 'cat')/@id"/>