Я безуспешно искал ответ на этот вопрос. Я уверен, что где-то пропустил ответ. Однако я пытаюсь напечатать / отобразить подмножество значений 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