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 使用具有公共id的另一个节点集为每个节点排序_Xml_Xslt_Xpath - Fatal编程技术网

Xml 使用具有公共id的另一个节点集为每个节点排序

Xml 使用具有公共id的另一个节点集为每个节点排序,xml,xslt,xpath,Xml,Xslt,Xpath,我希望对由a生成的表进行排序。确定排序的数据不包含在for each节点集中,而是包含在中。节点集和节点集之间有一个公共_id。我已尝试将公共_id分配给for each中的局部变量,但排序无法看到它。有没有办法做到这一点?下面是一些例子 示例XML <root> <seq> <common_id>B1U3</common_id> <seq_data>1</seq_data> </seq>

我希望对由a生成的表进行排序。确定排序的数据不包含在for each节点集中,而是包含在中。节点集和节点集之间有一个公共_id。我已尝试将公共_id分配给for each中的局部变量,但排序无法看到它。有没有办法做到这一点?下面是一些例子

示例XML

<root>
  <seq>
    <common_id>B1U3</common_id>
    <seq_data>1</seq_data>
  </seq>
  <seq>
    <common_id>R3D</common_id>
    <seq_data>3</seq_data>
  </seq>
  <seq>
    <common_id>Y3110W</common_id>
    <seq_data>2</seq_data>
  </seq>

  <detail>
    <common_id>Y3110W</common_id>
    <other_data>spame</other_data>
  </detail>
  <detail>
    <common_id>B1U3</common_id>
    <other_data>spamo</other_data>
  </detail>
  <detail>
    <common_id>R3D</common_id>
    <other_data>spama</other_data>
  </detail>
</root>
当前XSLT

<xsl:template match="/">
  <table>
    <tr>
        <td>Common ID</td>
        <td>Other Data</td>
    </tr>
    <xsl:for-each select="detail">
      <xsl:variable name="local_id" select="common_id"/>
      <xsl:sort select="../seq[common_id = $local_id]/seq_data"/>
        <tr>
          <td><xsl:value-of select="common_id"/></td>
          <td><xsl:value-of select="other_data"/></td>
        </tr>
    </xsl:for-each>
  </table>
</xsl:template>

公共ID
其他数据

如果使用
current()
函数而不是变量,它是否有效?此外,您可能希望将排序设置为数字而不是字典:

<xsl:sort select="../seq[common_id = current()/common_id]/seq_data"
          data-type="number"/>

如果使用
current()
函数而不是变量,它是否有效?此外,您可能希望将排序设置为数字而不是字典:

<xsl:sort select="../seq[common_id = current()/common_id]/seq_data"
          data-type="number"/>


使用
xsl:sort
并将模板的匹配更改为
match=“/root”
应该可以正常工作+1这已经达到了完美的效果。我知道会有一个“current()”功能,但在文档中找不到它。谢谢大家!!是的,这有点奇怪-它是一个用于XPath表达式的函数,但XSLT规范中记录了它,而不是XPath规范。使用
xsl:sort
并将模板的匹配更改为
match=“/root”
,应该可以正常工作+1这已经达到了完美的效果。我知道会有一个“current()”功能,但在文档中找不到它。谢谢大家!!是的,这有点奇怪——它是一个用于XPath表达式的函数,但它是在XSLT规范中记录的,而不是在XPath规范中记录的。