我有一个问题,我不知道解决方案。我正在使用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作为一个列表。
答案 0 :(得分:0)
您是如何从中调用XSLT处理的?命令行?一些编程语言?
简单的方法是将所有文件连接成一个单独的大型xml文件,然后将单个大型xml文件传递给XSLT。
进行连接的技术/代码将根据您调用的语言而有所不同。
答案 1 :(得分:0)
这很简单:
<xsl:for-each select="document(.//url)//Genre">
<xsl:sort select="StringInfo">
...
</xsl:for-each>