Как я применяю шаблоны к каждому выбранному узлу в для - каждый?

Vector - это конкретный класс, который реализует интерфейс List , так что технически это уже List. Вы можете сделать это:

List list = new Vector();

или:

List list = new Vector();

(при условии Vector из String с).

Если, однако, вы хотите преобразовать его в ArrayList , который является ближайшей реализацией List к `Vector ~ в Java Collections Framework, то просто сделайте это:

List newList = new ArrayList(vector);

или для общей версии, предполагая Vector из String с:

List newList = new ArrayList(vector);

7
задан Jakob 25 October 2009 в 10:16
поделиться

4 ответа

Я бы согласился с ndim

14
ответ дан 6 December 2019 в 10:51
поделиться

Я думаю, что использование шаблонов apply-templates и шаблонов является более чистым решением:

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>

  <xsl:template match="/">
    <body>
      <xsl:apply-templates select="album" mode="ol" />
    </body>
  </xsl:template>

  <xsl:template match="album" mode="ol">
    <ol>
      <xsl:apply-templates select="track" mode="li" />
    </ol>
  </xsl:template>

  <xsl:template match="track" mode="li">
    <li>
      <xsl:apply-templates select="." />
    </li>
  </xsl:template>

  <xsl:template match="track">
    <a href="{@id}">
      <xsl:value-of select="." />
    </a>
  </xsl:template>


</xsl:stylesheet>

приводит к:

<body>
  <ol>
    <li>
      <a href="shove">Somebody To Shove</a>
    </li>
    <li>
      <a href="gold">Black Gold</a>
    </li>
    <li>
      <a href="train">Runaway Train</a>
    </li>
  </ol>
</body>
0
ответ дан 6 December 2019 в 10:51
поделиться

Я бы немного реструктурировал его (если вам не нужна сортировка, которую делает возможным подход для каждого ):

<xsl:template match="/album">
  <ol>
    <xsl:apply-templates select="track"/>
  </ol>
</xsl:template>

<xsl:template match="track">
  <li><a href="{@id}"><xsl:apply-templates/></a></li>
<xsl:template>

Это выглядит короче и ближе к точка, ИМХО.

Я думаю, ваш

    <xsl:for-each select="track">
       <li><xsl:apply-templates/></li>
    </xsl:for-each>

проходит через все элементы дорожки с помощью для каждого , а затем применяет правила по умолчанию к своим потомкам. Таким образом, содержимое для каждого имеет тот же контекстный узел, что и шаблон match = "track" , и, следовательно, шаблон match = "track" никогда не совпадает.

Если вы действительно хотите использовать для каждого таким образом, вам нужно будет изменить любой из следующих двух вещей в вашем подходе:

  1. Добавить имя = "track" в шаблоне match = "track" , а затем используйте из для каждого (моя идея, и хуже, чем у Tim C )
  2. Используйте Tim C Решение с использованием . Это дает то преимущество, что позволяет избежать именования и сохранить возможность сортировки треков.
4
ответ дан 6 December 2019 в 10:51
поделиться

каждый оператор изменяет контекстный узел от альбома к треку. Вызов apply-templates по умолчанию применяет шаблоны к дочерним узлам контекстного узла, которые в вашем случае являются дочерними узлами элемента track. Следовательно, ваш шаблон, который соответствует "треку", никогда не будет запущен.

0
ответ дан 6 December 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: