我有非結構化XML的Adlib文件,它包含以下格式的數據:非結構化(的Adlib)XML使用XSLT結構化的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的部分,以便更容易理解,when:測試實際上檢查荷蘭語的描述和變換他們成等價的英文標籤...
您可以使用XSLT 2.0具有強大'的xsl:for-每個-group'構建? –
目前還沒有,不,因爲PHP(用於處理文件)仍然依賴於XSLT 1.0 ...將Java/Saxon添加到混合中以處理XML文件將會過度。 – wimvds