Перечисление узлов из разных циклов для каждого поиска в одной переменной / последовательности / группе - PullRequest
0 голосов
/ 29 марта 2011

У меня есть проблема, решение которой я не знаю. Я использую xslt 1.0.

Моя задача следующая:

У меня есть файл, в котором есть ссылки на разные XML-файлы. Моя работа состоит в том, чтобы получить имена этих файлов, а затем перебрать каждый из этих файлов в поисках тега <Genre>. Так что, может быть, в первом файле я нахожу 3 <Genre> элементов, во 2-м элементе 1 <Genre> ... и так далее до n-го файла.

После сбора всех элементов <Genre> из всех файлов мне нужно отсортировать их (в них содержится строковая информация, аналогичная их названию). Чтобы отсортировать их, мне нужно иметь ВСЕ элементы <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 в списке / группе / последовательности ... так что я могу сделать сортировку по всем тегам всех файлов в виде одного списка.

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Это совершенно просто сделать с чем-то вроде этого:

<xsl:for-each select="document(.//url)//Genre">
  <xsl:sort select="StringInfo">
    ...
</xsl:for-each>
0 голосов
/ 30 марта 2011

Как вы вызываете обработку XSLT?командная строка?какой-то язык программирования?

Простой подход - объединить все файлы в один большой XML-файл и затем передать один большой XML-файл в XSLT.

Техника / код для объединениябудет варьироваться в зависимости от языка, с которого вы вызываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...