当前位置: 首页 > 知识库问答 >
问题:

从指定顺序的xml中选择

南门鸿哲
2023-03-14

在python上使用xslt 1.0,我试图在指定顺序时选择几个项目:

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item name='1'>
first
</item>
<item name='2'>
second
</item>
<item name='3'>
third
</item>
</items>

如果我使用一个带有一个大的或在一起列表的for-each,我可以得到我想要的项目,但是只能按照上面xml源文档的原始顺序。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
        <xsl:for-each select="items/item[@name='2']|items/item[@name='1']">
<p>hi</p>
<xsl:value-of select="." />
</xsl:for-each>
  </body>
  </html>
    </xsl:template>
</xsl:stylesheet>

这就产生了:

hi
first
hi
second

但我想让它输出:

hi
second
hi
first

我认为使用xsl:apply模板可能是一种方法,但即使是这个简单的示例,我也无法让它工作。XSLT1.0中按特定顺序选择元素的最佳方法是什么?

共有1个答案

柯学
2023-03-14

您可以使用

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  <xsl:template match="/"> 
    <html> 
      <body> 
        <xsl:for-each select="items/item[@name='2' or @name='1']"> 
          <xsl:sort select="@name" data-type="number" order="descending"/>
          <p>hi</p>  
          <xsl:value-of select="."/> 
        </xsl:for-each> 
      </body> 
    </html> 
  </xsl:template> 
</xsl:stylesheet>

xsltransform演示1

"我认为使用xsl:应用模板可能是最好的方法,但是即使是这个简单的例子我也无法让它工作"

这也是可能的,例如:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  <xsl:template match="/"> 
    <html> 
      <body> 
        <xsl:apply-templates select="items/item[@name='2']"/>
        <xsl:apply-templates select="items/item[@name='1']"/>
      </body> 
    </html> 
  </xsl:template> 

  <xsl:template match="items/item">
      <p>hi</p>  
      <xsl:value-of select="."/> 
  </xsl:template>
</xsl:stylesheet>

xsl转换demo 2

输出:

<html>
   <body>
      <p>hi</p>
      second

      <p>hi</p>
      first

   </body>
</html>

 类似资料:
  • 问题内容: 假设我有一个查询“ select * from子句,其中id在(0,2,5,1,3)中”,我实际上希望返回的行以它们在where子句中指定的相同顺序返回。ID的顺序将随查询的不同而改变,并且该顺序没有模式。 我知道可以更改数据模型,创建临时表等。但是请相信我,这些类型的解决方案在我的情况下将行不通。我也无法在应用程序代码中更改结果对象的顺序。 我还知道,不同的数据库引擎对事物的排序方式

  • 问题内容: 我已经搜索了很多,但是找不到任何解决方案。我以这种方式使用Java线程池: 以这种方式,任务以随后的顺序执行(如在队列中)。但是我需要更改“选择下一个任务”策略。所以我想为每个任务分配优先级(不是线程优先级),并执行与这些优先级相对应的任务。因此,当执行者完成另一个任务时,它将选择下一个任务作为具有最高优先级的任务。它描述了常见问题。也许有一种更简单的方法没有说明优先级。它选择上一个添

  • 问题内容: 我对CSS和属性有些困惑。我一直认为,在属性值中指定多个类的顺序具有一定的意义。后一类可以/应该覆盖前一类的定义,但这似乎不起作用。这是一个例子: 我希望第三个示例使用蓝色边框,因为额外指定的边框会覆盖基本边框。 我在ubuntu 9.04上使用FF 3 问题答案: 属性被覆盖的顺序不是由类在属性中定义的顺序决定的,而是由它们在CSS中出现的位置决定的。 在该文本将出现,而不是; 因为

  • 问题内容: 我正在处理SQL Reporting Services报表(在VS.Net 2005中),该报表在矩阵中显示不同数据的数量。这些列对特定集合中的客户数量进行计数。因此,我有几个类似的列:“ 1个雇主”,“ 2-9个雇主”,“ 10-19个雇主”等等。 我的问题是SQL Reporting Services按字母顺序对矩阵中的列进行排序。因此,我最终在“ 1个雇主”列之后但在“ 2-9”

  • 问题内容: 我正在尝试在Java项目上运行Dagger 2和Lombok。当然,龙目岛必须首先运行,但是它的确存在取决于机会。起初,我怀疑我可以通过类路径中库jar的相应位置来指定顺序,但是该顺序显然被忽略了。 有没有办法指定它们以某种方式运行的顺序,还是我必须忍受不能合并两个AP的情况? 我制作了一个SSCCE测试用例。 一个简单的&就足以说明问题- 如果在App.java中注释第18行和取消注

  • 我正在尝试在我的Java项目中运行Dagger2和Lombok。当然,龙目岛必须先跑,但它是否真的跑了,似乎要看机会。起初,我怀疑我可以通过库jar在类路径中各自的位置来指定顺序,但这个顺序显然被忽略了。 有没有一种方法可以指定它们运行的顺序,或者我只能忍受不能组合两个AP? 我已经生成了一个SSCCE测试用例。 一个简单的&就足以说明这个问题--如果您在app.java中注释第18行而取消注释第