私はこのXMLを持っています:
<XmlTreff IsSub="false" Start="false" Stop="false">
<Id>Id0</Id>
<Tittel>Title0</Tittel>
</XmlTreff>
<XmlTreff IsSub="false" Start="false" Stop="false">
<Id>Id1</Id>
<Tittel>Title1</Tittel>
</XmlTreff>
<XmlTreff IsSub="true" Start="true" Stop="false">
<Id>Id2</Id>
<Tittel>Title2</Tittel>
</XmlTreff>
<XmlTreff IsSub="true" Start="false" Stop="false">
<Id>Id3</Id>
<Tittel>Title3</Tittel>
</XmlTreff>
<XmlTreff IsSub="true" Start="false" Stop="true">
<Id>Id4</Id>
<Tittel>Title4</Tittel>
</XmlTreff>
<XmlTreff IsSub="false" Start="false" Stop="false">
<Id>Id5</Id>
<Tittel>Title5</Tittel>
</XmlTreff>
この XML は XSLT で変換され、この HTML を生成する必要があります
<html>
<body>
<div>
<div>
<a href="doesntmatter">Title0</a>
</div>
<div>
<a href="doesntmatter">Title1</a>
</div>
<ul>
<li>
<a href="doesntmatter">Title2</a>
</li>
<li>
<a href="doesntmatter">Title3</a>
</li>
<li>
<a href="doesntmatter">Title4</a>
</li>
</ul>
<div>
<a href="doesntmatter">Title5</a>
</div>
</div>
</body>
</html>
属性 Start、Stop、および IsSub がタグの開始と終了を制御すると考えられていました。
現在、私はこのXSLTを持っています:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/XmlSokeResultat/Treff">
<html xmlns="http://www.w3.org/1999/xhtml" lang="no" xml:lang="no">
<body>
<xsl:for-each select="XmlTreff">
<div class="XmlTreffinfo">
<xsl:if test="@IsSub = 'false'">
<div>
<div>
<xsl:element name="a">
<xsl:value-of select="Tittel"/>
</xsl:element>
</div>
</div>
</xsl:if>
<xsl:if test="@Start = 'true'">
<div>
<ul>
</xsl:if>
<xsl:if test="@IsSub = 'true'">
<ul>
<li>
<a>
<xsl:value-of select="."/>
</a>
</li>
</ul>
</xsl:if>
<xsl:if test="@Stop = 'true'">
</ul>
</div>
</xsl:if>
</div>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
問題は、開始タグと終了タグを構文的に間違った場所に置くことが許可されていないことです。これを解決する方法を知っていますか?(開始 div と ul が終了タグとは別の場所に配置されている ifs 内を参照してください)
編集: XML に属性を追加および削除できますが、要素構造は次のようにする必要がありますか?
EDIT2: concat と value-of を使用して HTML タグをレンダリングしようとしました
<xsl:value-of disable-output-escaping="yes" select="concat('<', '/ul', '>')" />
<xsl:value-of disable-output-escaping="yes" select="concat('<', '/div', '>')" />
興味深いことに、IE10 はこれを処理できますが、Firefox は正しくレンダリングできません。