アプリ版:「スタンプのみでお礼する」機能のリリースについて

XML::LibXMLでXPathを使いたいのですが、
ワイルドカードの指定がうまくいきません。
要素名に*を当てはめたいのですが、、、、
例えば以下の通りです。
下記XMLのid="1-1"とid="1-2"を抜きだしたいのです。
できればXPathにて指定したいのですが、、、
教えてください。

my $dom = $parser->parse_file($xml_file_str) or die;
$x = "//Test/TestText[@id="1-*"]/text()";
$c = $dom->findnodes($x);

解析対象XML
<XML>
<Test>
<TestText id="1-1">テスト1</TestText>
<TestText id="1-2">テスト2</TestText>
<TestText id="2-1">テスト3</TestText>
</Test>
</XML>

A 回答 (2件)

>XPath自体に変更を加えずに


XPath自体には、正規表現は使えなかったと思います。

いったんセレクトしたノードリストをPerl のgrep で処理することはできると思いますけど。
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございます。
解決はしていませんが、この方法では行き詰るという
ことが分かりました。

お礼日時:2006/03/07 14:57

LibXMLを使っていないので間違っていたらすみません。


XPathでは、
~の文字列で始まるというのは、
starts-with( ) 関数を使います
id が '1-' で始めるノードは
//TestText[starts-with(@id,'1-')]
のように指定できます。

あと、蛇足ですが、
XML は予約語なので、XMLを要素名として使うことは規約違反です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

ただ、XPath自体に変更を加えずに
//Test/TestText[@id="1-*"]/text()
を何とか処理したいのです。

XPath文が既にあり、それを使ってXMLを読みたい
のです。

やはり、XML::LibXMLでは無理でしょうか、、、

お礼日時:2006/03/07 10:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!