如何在每行以xslt 1.0结束后创建换行符?

时间:2017-11-01 16:52:45

标签: xml xslt

这是我的XML数据结构:

5;38.482;
8;39.812;
9;41.115;

实际上不仅有AW~BB,而且A~Z + AA~AZ + BA~BZ ....超过100属性, 如果我想选择所有属性以B开头,那就是B + BA~BZ, 在这种情况下,只有BA& BB,每行结束后换行 那就是:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="yes"/>
  <xsl:template match="/">
    <xsl:variable name="headers1" 
                  select="MPIFile/Body/Data/row/@*
                          [starts-with(name(), 'B')]"/>
       <xsl:for-each select='$headers1'>
         <xsl:value-of select="."/> 
         <xsl:text>;</xsl:text>
      </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

我该怎么做? 这是我到目前为止的方式:

5;38.482;8;39.812;9;41.115;

但输出为

    step 1:
    private Bag<Integer>[] array = (Bag<Integer>[]) new Bag[V];
    for all indexes:
    array[i] = new Bag<Integer>();

这不对,怎么解决这个问题? 非常感谢

1 个答案:

答案 0 :(得分:0)

在输出中,您希望输入中的每一行都能发生一次。作为软件构造的基本原则,应该向您建议您希望对输入中的每一行评估一部分XSLT程序。

但是你没有变换的任何部分可以被描述为只处理输入的一行。因此,您当前的草图中没有可以放置换行符的位置,以便每行插入一次。

考虑这样的结构:

<xsl:stylesheet ... >
  <xsl:output method="text"/>

  <xsl:template match="row">
    <xsl:apply-templates select="@*[starts-with(name(), 'B')]"/>
    <xsl:message>We have just done one row!</xsl:message>
    ... other end-of-row code here ...
  </

  <xsl:template match="@*">
    <xsl:value-of select="concat(., ';')"/>
  </

</ 

现在,您应该明白在哪里放置XSLT表达式以在输出中生成换行符。如果您查阅标记为近似重复的问题,您应该知道如何编写这样的表达式。