- - PR -
XHTMLをXPathで検索するには?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2002-05-24 12:44
みなさん、はじめまして。
いきなりですがどうしても分からないことがあります。 XHTMLとして作成したファイルを、XPathを用いてノード検索したいと考えている のですが、うまくいきません。 下に例を示しますが・・・ == XHTML == <?xml version="1.0" encoding="Shift_JIS"?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lan="ja"> <body> <div id="div1">##この部分をXPathで検索/取得したい!##</div> </body> == XPath == /html/body/div[@id='div1'] 上記のようなパスでは検索できないのです。どうやら<html>タグで指定している デフォルトのnamespaceが関係しているようなのですが、どうやってXPathで 表現するのか分かりません。 どなたか、XPathでデフォルトのnamespaceを指定する方法をご存じの方が いらっしゃいましたら、ご教授をお願いします。 |
|
投稿日時: 2002-05-24 14:44
例えば次のように書くことができます。
/*[local-name() = 'html']/*[local-name() = 'body']/*[local-name() = 'div'][@id = 'div1'] XSLTスタイルシート内でのXPathであるなら、このような書き方もあります。 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.w3.org/1999/xhtml"> <xsl:template match="/"> <xsl:value-of select="/x:html/x:body/x:div[@id = 'div1']"/> </xsl:template> </xsl:stylesheet> |
|
投稿日時: 2002-05-24 21:29
ご回答、ありがとうございます。
DOMノードを検索するために xalan の XPathAPIクラスで XPathを使おうと思って いたんですが、結構めんどうな形式になってしまうんですね。 あまり長い形式だとプログラムソース上での実用性に欠けるので、htmlタグの デフォルトnamespace を取ってしまう方向にしてしまいそうです (^^; (XHTMLとよべない代物になってしまいますが....) 何か他にいい方法ないか、考えてみます。ご協力ありがとうございました。 |
|
投稿日時: 2002-05-29 16:32
動作未確認ですが、Xalan-Java2 の場合、
namespaceとそのprefixを設定するには、PrefixResolverインターフェイスを継承して、getNamespaceForPrefix メソッドを実装します。そして、それをXPathAPIに渡します。 cf. http://marc.theaimsgroup.com/?l=xalan-dev&m=100739564326979&w=2 (xml.apache.orgのxalan-devメーリングリスト) さらに、default namespaceを設定するには、getNamespaceForPrefix の 引数 prefix が空 ("") のときに、該当のURIを返してやればいいようです。 cf. http://xml.apache.org/xalan-j/apidocs/index.html なお、こちらではXalan-C++ 1.3で同じことを試しました。 namespace は扱えたのですが、default namespace はうまくいきませんでした。 apidocsにも触れられてないので、Xalan-C++ 1.3はdefault namespaceを扱えないの かもしれません。 [ メッセージ編集済み 編集者: ちいにぃ 編集日時 2003-10-02 14:28 ] |
1