XML foreach不打印全部

时间:2017-05-14 21:24:38

标签: xml xslt

我想为每个循环打印此XML部分中的所有元素:

<education>
        <institution>Buckinghamshire New University</institution>
        <level>BSc Computing and Web</level>
        <startDate>Start date: 2016-09-01 </startDate>
        <endDate>End date: 2019-06-01 </endDate>
        <subject>Programming Concepts</subject>
        <grade>100%</grade>
        <subject>XML</subject>
        <grade>50%</grade>
        <institution>Grammar School</institution>
        <level>Secondary School</level>
        <startDate>2012-09-01 </startDate>
        <endDate>2016-07-01 </endDate>
        <subject>Physical education and sports</subject>
        <grade>A</grade>
        <subject>Philosophy</subject>
        <grade>B</grade>
        <subject>Math</subject>
        <grade>C</grade>
        <subject>English</subject>
        <grade>B</grade>
        <subject>Croatian</subject>
        <grade>B</grade>
</education>

我试过这个:

<xsl:for-each select="education">
    <xsl:value-of select="subject"/>;<br/>
    <xsl:value-of select="grade"/>;<br/>
</xsl:for-each>

但它只显示出这样的第一次出现:

Programming Concepts
100%

我做错了什么?

2 个答案:

答案 0 :(得分:2)

  

我做错了什么?

你在做:

education

并且输入中只出现一次<xsl:value-of select="subject"/> 。因为你显然正在使用XSLT 1.0,所以说明:

<xsl:for-each select="education/subject">
    <xsl:value-of select="."/>;<br/>
    <xsl:value-of select="following-sibling::grade[1]"/>;<br/>
</xsl:for-each>

仅获取第一个主题的值。你可能想做类似的事情:

new Handler().postDelayed(()->myButton.setVisibility(View.VISIBLE),2000);

但由于你没有发布预期的结果,所以只不过是一个猜测。

答案 1 :(得分:0)

在XSLT 1.0中,有一个关于value-of如何运作的细节, 关于哪些人不记得:

即使select返回了多个项目,value-of仅提供第一个 他们和其他人(显然)&#34;消失了#34;。

在XSLT 2.0中,它以两种方式进行了更改:

  • value-of提供所有返回的项目(更直观的解决方案)。
  • 它有一个额外的,可选的separator属性,说明了什么 插入相邻的项目之间。

但假设您要保留1.0版本。 如果您要打印所有 subjectgrade元素 文件顺序,你可以这样做:

<xsl:template match="/">
  <xsl:for-each select="education/subject | education/grade">
    <xsl:value-of select="."/>;<br/>
    <xsl:text>&#xA;</xsl:text>
  </xsl:for-each>
</xsl:template>

我在循环中添加<xsl:text>&#xA;</xsl:text>以保留 生成的HTML代码中的单独行中的每个项目, 不仅仅是在浏览器中看到的内容。