У меня есть неструктурированный файл Adlib XML, который содержит данные в следующем формате:
<record>
...
<dimension.type>height</dimension.type>
<dimension.type>width</dimension.type>
<dimension.type>height</dimension.type>
<dimension.type>width</dimension.type>
<dimension.type>depth</dimension.type>
<dimension.notes>without frame</dimension.notes>
<dimension.notes>without frame</dimension.notes>
<dimension.notes>with frame</dimension.notes>
<dimension.notes>with frame</dimension.notes>
<dimension.notes>with frame</dimension.notes>
<dimension.value>28.0</dimension.value>
<dimension.value>47.9</dimension.value>
<dimension.value>41.4</dimension.value>
<dimension.value>62.9</dimension.value>
<dimension.value>8.0</dimension.value>
...
</record>
Я хотел бы преобразовать это в следующий формат:
<record>
...
<dimension>
<notes>without frame</notes>
<height>28.0</height>
<width>47.9</width>
</dimension>
<dimension>
<notes>with frame</notes>
<height>41.4</height>
<width>62.9</width>
<depth>8.0</depth>
</dimension>
...
</record>
Однако я немного застрял, поскольку эти узлы ссылаются на информацию в других узлах в той же позиции.Я придумал следующий XSLT:
<xsl:template match="dimension.value">
<xsl:variable name="pos" select="position()"/>
<dimension>
<xsl:choose>
<xsl:when test="../dimension.type[$pos] = 'height'">
<height><xsl:value-of select="."/></height>
</xsl:when>
<xsl:when test="../dimension.type[$pos] = 'width'">
<width><xsl:value-of select="."/></width>
</xsl:when>
<xsl:when test="../dimension.type[$pos] = 'depth'">
<depth><xsl:value-of select="."/></depth>
</xsl:when>
</xsl:choose>
<notes>
<xsl:value-of select="../dimension.notes[$pos]"/>
</notes>
</dimension>
</xsl:template>
, который производит данные в формате:
<dimension>
<height>28.0</height>
<notes>without frame</notes>
</dimension>
<dimension>
<width>47.9</width>
<notes>without frame</notes>
</dimension>
<dimension>
<height>41.4</height>
<notes>with frame</notes>
</dimension>
<dimension>
<width>62.9</width>
<notes>with frame</notes>
</dimension>
<dimension>
<depth>8.0</depth>
<notes>with frame</notes>
</dimension>
Но это не делает группировку по части заметки, которая бы выполняла обработкурезультат немного проще (теперь я решаю это в коде, но у XSLT должен быть способ сделать это, верно?).Любая помощь (указатели на соответствующую информацию или соответствующие фрагменты XSLT) будет принята с благодарностью ...
Кстати, я перевел части XML / XSLT, чтобы упростить понимание, когда: test фактически проверяет описания на голландскоми превращает их в эквивалентные английские теги ...