で特定のXML文書を変換HIXSLT
私のXML文書には、次のレイアウトに
<root>
<child>
<item type="ID">id1</item>
<item type="TEXT">text1</item>
</child>
<child>
<item type="ID"/>
<item type="TEXT">text2</item>
</child>
<child>
<item type="ID"/>
<item type="TEXT">text3</item>
</child>
<child>
<item type="ID">id2</item>
<item type="TEXT">text4</item>
</child>
<child>
<item type="ID"/>
<item type="TEXT">text5</item>
</child>
...
</root>
毎回を持っているタイプ= IDと空の項目タグが存在し、それが同じ値を有することを意味します前の兄弟。今、私はこれを私のソリューションは、
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
<xsl:apply-templates select="//child/item[@type='ID'][text()='id1' or text()='id2']"/>
</root>
</xsl:template>
<xsl:template match="child/item[text()='id1' or text()='id2']">
<child id="{text()}">
<xsl:value-of select="./../item[@type='TEXT']/."/>
<xsl:apply-templates select="./../following::*[1]/item[@type='ID'][not(text()='id1' or text()='id2')]"/>
</child>
</xsl:template>
<xsl:template match="child/item[not(text()='id1' or text()='id2')]">
<xsl:value-of select="./../item[@type='TEXT']/."/>
<xsl:apply-templates select="./../following::*[1]/item[@type='ID'][not(text()='id1' or text()='id2')]"/>
</xsl:template>
</xsl:stylesheet>
それは動作しますが、醜いとunflexibleである
<root>
<child id="id1">text1text2text3</child>
<child id="id2">text4text5</child>
...
</root>
にこれを変換したいです。たとえば、id1とid2だけでなく、任意のid値を持っていたらどうなりますか?誰か良いアドバイスかより良い解決策を持っていますか?
XSLT 2を使用できますか、またはXSLT 1.0に制限されていますか? –
良い質問、+1。キーを使用した、簡単で簡単なXSLT 1.0ソリューションについては、私の答えをご覧ください。 –