在一个变量/序列/组中列出来自不同for-each循环搜索的节点

时间:2011-03-29 16:05:35

标签: xslt sequence

我有一个问题,我不知道解决方案。我正在使用xslt 1.0。

我的任务如下:

我有一个文件,其中有不同的.xml文件的URL。我的工作是,获取这些文件的名称,然后遍历每个文件,查找标记<Genre>。所以可以在第一个文件中找到3 <Genre>个元素,在第二个1 <Genre>元素中......依此类推,直到第n个文件。

收集了所有文件中的所有<Genre>元素后,我需要对它们进行排序(它们中包含字符串信息,就像它们的名字一样)。要对它们进行排序,我需要在一个varibale / group / sequence中包含所有<Genre>元素,以便我可以对它们应用<xsl:sort>

但我不知道,我如何添加/联合/连接我在每个文件的每个循环中找到的<Genre>元素:(

请帮助......我现在已经尝试了9个小时而没有结果。

代码看起来大致如下:

包含文件名

的xml文件
 <document-properties>
      <source-documents>
        <document name="Input/Commandline.xml"/>
        <document name="Input/Outputfiles.xml"/>
        <document name="Input/PrimaryFunctionalities.xml"/>
        <document name="Input/Requirements.xml"/>
        <document name="Input/UsecaseTree.xml"/>
        <document name="Input/CurrentDate.xml"/>
        <document name="CommentFiles/VWCC_Test.xml"/>
        </source-documents>
    </document-properties>

我在.xsl中执行以下操作:

<xsl:for-each select="/document-properties/source-documents/*">      
  <xsl:for-each select="document(@name)/descendant::newTerm">
    <xsl:variable name="CurrentNewTerm" select="."/>

    <w:tr wsp:rsidR="00000000">
      <w:tblPrEx>
        <w:tblCellMar>
          <w:top w:w="0" w:type="dxa" />
          <w:bottom w:w="0" w:type="dxa" />
        </w:tblCellMar>
      </w:tblPrEx>
      <w:tc>
        <w:tcPr>
          <w:tcW w:w="2480" w:type="dxa" />
        </w:tcPr>
        <w:p wsp:rsidR="00000000" wsp:rsidRDefault="00C06CD8">
          <w:pPr>
            <w:spacing w:before="60" w:after="60" />
            <w:rPr>
              <w:b />
            </w:rPr>
          </w:pPr>
          <w:r>
            <w:rPr>
            </w:rPr>
             <w:t>                   
               <xsl:value-of select="$CurrentNewTerm"/>
             </w:t>
          </w:r>
        </w:p>
      </w:tc>

      <xsl:variable name="abbrvFileName" select="/document-properties/abbreviation-document/*[@name]"/>
      <xsl:for-each select="document($abbrvFileName)/descendant::term">

      </xsl:for-each>
      <w:tc>
        <w:tcPr>
          <w:tcW w:w="2480" w:type="dxa" />
        </w:tcPr>
        <w:p wsp:rsidR="00000000" wsp:rsidRDefault="00C06CD8">
          <w:pPr>
            <w:spacing w:before="60" w:after="60" />
            <w:rPr>
              <w:b />
            </w:rPr>
          </w:pPr>
          <w:r>
            <w:rPr>
            </w:rPr>
            <w:t>
              <xsl:value-of select="$CurrentNewTerm"/>
            </w:t>
          </w:r>
        </w:p>
      </w:tc>
    </w:tr>
  </xsl:for-each>
</xsl:for-each>    

如前所述,通过这种方式,我一次得到一个文件的标签......但我需要一种方法来保存列表/组/序列中每个for-each循环的“found”标签...这样我就可以对所有文件的所有标签做一个SORT作为一个列表。

2 个答案:

答案 0 :(得分:0)

您是如何从中调用XSLT处理的?命令行?一些编程语言?

简单的方法是将所有文件连接成一个单独的大型xml文件,然后将单个大型xml文件传递给XSLT。

进行连接的技术/代码将根据您调用的语言而有所不同。

答案 1 :(得分:0)

这很简单:

<xsl:for-each select="document(.//url)//Genre">
  <xsl:sort select="StringInfo">
    ...
</xsl:for-each>