Как я могу сделать список значений XML, разделенных запятыми? XML версия 1.0 - PullRequest
4 голосов
/ 18 ноября 2011

Я безуспешно искал ответ на этот вопрос. Я уверен, что где-то пропустил ответ. Однако я пытаюсь напечатать / отобразить подмножество значений XML в виде списка с разделителями-запятыми. Вот пример того, что я пытаюсь сделать;

XML Doc.

<vehicle>
  <car new="y">
    <yr>2012</yr>
    <make>Ford</make>
    <model>Mustang</model>
    <color>Blue</color>
  </car>
  <car new="y">
    <yr>2012</yr>
    <make>Chevy</make>
    <model>Camaro</model>
    <color>Red</color>
  </car>
  <car new="y">
    <yr>2012</yr>
    <make>Subaru</make>
    <model>Impreza</model>
    <color>White</color>
  </car>
  <car new="n">
    <yr>2000</yr>
    <make>Toyota</make>
    <model>Tacoma</model>
    <color>Silver</color>
  </car>
  <car new="n">
    <yr>1998</yr>
    <make>Dodge</make>
    <model>Durango</model>
    <color>Green</color>
  </car>
</vehicle>

XSL DOC ..

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="/" >

<html>
  <head>
    <link rel="stylesheet" type="text/css" href="styles2.css" />
  </head>
  <body>
      <h2> New Cars </h2>
      <p>
        <xsl:for-each select="vehicle/car">
        <xsl:sort select="./yr" data-type="text" order="ascending" />
        <xsl:if test="./@new='y'">
        <xsl:value-of select="yr" />
        <xsl:text> </xsl:text>
        <xsl:value-of select="make" />
        <xsl:text> - </xsl:text>
        <xsl:value-of select="model" />
        </xsl:if>
        </xsl:for-each>
      </p>
  </body>
</html>
  </xsl:template>
 </xsl:stylesheet> 

Итак, в этом примере я хочу выбрать все «новые» автомобили и поместить их в список с разделителями-запятыми, а не запятую после последнего элемента в списке.

Я не могу использовать xsl:if test="position() != last()>, поскольку позиция «последней» «новой» машины может не быть «последней» позицией в xml. Я бы предпочел, чтобы это было сделано в XML версии 1.0.

Есть предложения или идеи? Заранее спасибо!

Пример вывода:

2012 Ford Mustang, 2012 Chevy Camaro, 2012 Subaru Impreza

1 Ответ

2 голосов
/ 18 ноября 2011

Используйте

<xsl:for-each select="vehicle/car[@new='y']">

вместо получения их всех и использования теста if. Тогда вы можете использовать last ().

...