• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XSLで親の取得方法)

XSLでXMLの親要素を取得する方法

このQ&Aのポイント
  • XSLで、<item>要素が<a>要素の下にあるのか<b>要素の下にあるのかを知る方法はありますか?
  • <item>要素が複数箇所にわかれているため、local-name(..)の方法では難しいです。
  • XMLの親要素を取得するためのXSLの方法についてご教示いただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

あ、すんません。 >xsl:output method="html" になっているけどうそです >xsl:output method="xml" で

その他の回答 (1)

回答No.1

自信なし。回答というよりアドバイスか。 Q3241862-1.xml <?xml version="1.0" encoding="UTF-8"?> <data> <a><item>アイテムA</item></a> <b><item>アイテムB</item></b> <b><d><e><item><f>アイテムC</f></item></e></d></b> <a><b><item>アイテムD</item></b></a> </data> Q3241862-1.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:himajin="himajin"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <himajin:hoge> <xsl:apply-templates /> </himajin:hoge> </xsl:template> <xsl:template match="data/a//item"> <himajin:item type="a"><xsl:value-of select="." /></himajin:item> </xsl:template> <xsl:template match="data/b//item"> <himajin:item type="b"><xsl:value-of select="." /></himajin:item> </xsl:template> </xsl:stylesheet> Q3241862-1R.xml <himajin:hoge xmlns:himajin="himajin"> <himajin:item type="a">アイテムA</himajin:item> <himajin:item type="b">アイテムB</himajin:item> <himajin:item type="b">アイテムC</himajin:item> <himajin:item type="a">アイテムD</himajin:item> </himajin:hoge> Q3241862-2.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:himajin="himajin"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <himajin:hoge> <xsl:apply-templates /> </himajin:hoge> </xsl:template> <!-- 複数の条件にマッチするときは確か下の方に書かれているものが優先されていたと思う。 以下の上下を入れ替えるとQ3241862-2Rの結果が変わる --> <xsl:template match="data//a//item"> <himajin:item type="a"><xsl:value-of select="." /></himajin:item> </xsl:template> <xsl:template match="data//b//item"> <himajin:item type="b"><xsl:value-of select="." /></himajin:item> </xsl:template> </xsl:stylesheet> Q3241862-2R.xml <himajin:hoge xmlns:himajin="himajin"> <himajin:item type="a">アイテムA</himajin:item> <himajin:item type="b">アイテムB</himajin:item> <himajin:item type="b">アイテムC</himajin:item> <himajin:item type="b">アイテムD</himajin:item> <!--下位優先なので。typeがbになっている--> </himajin:hoge> Q3241862-3.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:himajin="himajin"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <himajin:hoge> <xsl:apply-templates /> </himajin:hoge> </xsl:template> <xsl:template match="item"> <xsl:element name="himajin:item"> <xsl:attribute name="type"> <!-- local-nameにノードリストを指定したときは,指定されたものの中の 最初のノードに対する結果が返る。 とりあえず手元で, (ancestor::b | ancestor::a)を指定しても結果は変わらなかった。俺はよくわからんけど。 --> <xsl:value-of select="local-name( ancestor::a | ancestor::b)" /> </xsl:attribute> <xsl:value-of select="." /> </xsl:element> </xsl:template> </xsl:stylesheet> Q3241862-3R.xml <himajin:hoge xmlns:himajin="himajin"> <himajin:item type="a">アイテムA</himajin:item> <himajin:item type="b">アイテムB</himajin:item> <himajin:item type="b">アイテムC</himajin:item> <himajin:item type="a">アイテムD</himajin:item> </himajin:hoge>

関連するQ&A