• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:xsl、xpath式の書き方について)

xsl、xpath式の書き方について

このQ&Aのポイント
  • xslでxmlの値を取得する際に、xpath式を使用します。しかし、xpath式の書き方については正しく理解されていないことがあります。特に、外部ファイルからの値の取得に関しては注意が必要です。
  • 質問の例では、xslファイル内でtypeList.xmlの値を参照したいと考えていますが、正しいxpath式の書き方を知らないためにうまくいかない状況です。
  • この問題を解決するためには、xsl:value-of要素のselect属性の値を正しく設定する必要があります。具体的には、document()関数を使用して外部ファイルを参照し、xpath式を適切に指定する必要があります。

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

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

Q3207219-1.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="Q3207219-3.xsl" type="text/xsl"?> <empList> <emp> <type id="1" /> <name>鈴木</name> <desc>あああ</desc> </emp> <emp> <type id="4" /> <name>田中</name> <desc>いいい</desc> </emp> <emp> <type id="2" /> <name>田中</name> <desc>いいい</desc> </emp> <emp> <type id="3" /> <name>田中</name> <desc>いいい</desc> </emp> </empList> Q3207219-2.xml <?xml version="1.0" encoding="UTF-8"?> <!-- スタイルシートここはいらないだろう <?xml-stylesheet href="a.xsl" type="text/xsl"?> --> <typeList> <type id="2"> <title>タイプ2</title> </type> <type id="1"> <title>タイプ1</title> </type> <type id="3"> <title>猪突猛進タイプ</title> </type> <type id="4"> <title>遠隔操作タイプ</title> </type> </typeList> Q3207219-3.xsl <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="UTF-8" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" media-type="text/html" /> <xsl:template match="/"> <html> <head><title>サンプル</title></head> <body> <xsl:apply-templates select="empList/emp" /> </body> </html> </xsl:template> <xsl:template match="emp"> <h2><xsl:value-of select="name/text()" /></h2> <p>タイプ: <xsl:call-template name="hoge"><xsl:with-param name="Id" select="type/@id" /> <xsl:with-param name="Id2" select="document('Q3207219-2.xml')/typeList" /> </xsl:call-template> </p> <p>メモ:<xsl:value-of select="desc/text()" /></p> </xsl:template> <xsl:template name="hoge"> <xsl:param name="Id" /> <xsl:param name="Id2" /> <xsl:for-each select="$Id2/type"> <xsl:if test="$Id = @id"> <xsl:value-of select="title" /> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> 【後記】 手元のeXtyleとMinefieldで一応きちんと確認しているが, 正直自信がない。 俺は,XSLTを頻繁に書いている人でもないし どこかで引数や戻り値にノードリストを指定できないとか聞いたような気がするからだ。 (引数に出来ているのはMSXML 6(VB.NET Orcas付属)やGeckoのバージョンが関係して・・・ないか) (そのため、並び替えた後に処理ができないとか、なんかそういう話があったような。

noname#230379
質問者

お礼

おくれてすいません。 なるほどです。ありがとうございます。

関連するQ&A