• 締切済み

要素のとりだしかた

Jaxpのxmlパーサを使い、xmlからxmlに変換するプログラムを作っています。分からないことがあるのでぜひ教えてください。 例えば、 <book bookid="001"> <hon name="abc" /> <hon name="def" /> </book> <book bookid="002"> <hon name="ghi" /> </book> などというxmlからhonのnameがabcというものを探し、 あれば、"abc"とそのbookidの"001"を取り出す方法はどうすればいいでしょうか? abcは取り出せたのですが、それに対応するbookidが取り出せなくて困っています。 わかりづらくてすみません・・・。

みんなの回答

  • kazf
  • ベストアンサー率100% (1/1)
回答No.3

<result>  <book>   <name>abc</name>   <id>001</id>  </book>  <book>   <name>def</name>   <id>001</id>  </book>  <book>   <name>ghi</name>   <id>002</id>  </book> </result> 上記のような結果を得るためのXSLTは、次のようになります。 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  <xsl:template match="/">   <result>    <xsl:for-each select="root/book/hon/@name">     <book>      <id><xsl:value-of select="../../@bookid" /></id>      <name><xsl:value-of select="." /></name>     </book>    </xsl:for-each>   </result>  </xsl:template> </xsl:stylesheet> このXSLTを実行するにはJavaのTransformerを使用する必要があります。 詳しくは、下の参考ページをご覧下さい。 XSLTを使用しないで、Javaだけでやる方法もありますが、要素を生成したりする処理がめんどくさいので、XSLT変換が一番スッキリいく方法です。

参考URL:
http://www.hellohiro.com/xslt.htm
  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.2

ご質問の趣旨に合っていないかもしれませんが、xsltでhtml出力してみたので参考になればうれしいです。 入力XML <?xml version="1.0" encoding="Shift_JIS"?> <books> <book bookid="001"> <hon name="abc" /> <hon name="def" /> </book> <book bookid="002"> <hon name="ghi" /> </book> </books> 変換XSL <?xml version="1.0" encoding="Shift_JIS" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="Shift_JIS"/> <xsl:template match="/"> <html><body><table> <xsl:apply-templates/> </table></body></html> </xsl:template> <xsl:template match="book"> <xsl:for-each select="hon"> <xsl:if test="@name='abc'"> <tr><td> <xsl:value-of select="@name"/> </td><td> <xsl:value-of select="../@bookid"/> </td></tr> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>

  • kazf
  • ベストアンサー率100% (1/1)
回答No.1

質問の意図が分りづらいので、補足してください。 入力のXMLは分りましたが、変換後に出力したいXMLを示してください。 質問の内容から推測すると、変換後の出力XMLは、以下のような感じでしょうか。 <result>  <book>   <name>abc</name>   <id>001</id>  </book>  <book>   <name>def</name>   <id>001</id>  </book>  <book>   <name>ghi</name>   <id>002</id>  </book> </result>

limo
質問者

補足

わかりづらくてすみませんでした。 kazfさんが推測したとおりにしたいです。

関連するQ&A