3

を使用して XPath で指定された属性の値にアクセスするにはどうすればよいxml_grepですか?

私はもう試した:

# svn info http://unladen-swallow.googlecode.com/svn/trunk/ --xml > x
# cat x
<?xml version="1.0"?>
<info>
<entry
   kind="dir"
   path="trunk"
   revision="1171">
<url>http://unladen-swallow.googlecode.com/svn/trunk</url>
<repository>
<root>http://unladen-swallow.googlecode.com/svn</root>
<uuid>05521daa-c0b4-11dd-bb00-bd6ab96fe29a</uuid>
</repository>
<commit
   revision="1171">
<author>ebo@4geeks.de</author>
<date>2010-08-21T18:17:31.382601Z</date>
</commit>
</entry>
</info>



# xml_grep uuid x --text_only
05521daa-c0b4-11dd-bb00-bd6ab96fe29a
# xml_grep //info/entry/@path x --text_only # correct XPath syntax
error: unrecognized expression in handler: '//info/entry/@path' at /usr/bin/xml_grep line 198
# xml_grep //info/entry/[@path] x --text_only
# # no output

私はオンライン ヘルプ ページを見てきましたが、プロパティにまったく一致する唯一の構文は非常に冗長です。

# xml_grep '*[@path]' x
<?xml version="1.0" ?>
<xml_grep version="0.7" date="Wed Aug 28 15:22:13 2013">
<file filename="x">
  <entry kind="dir" path="trunk" revision="1171">
    <url>http://unladen-swallow.googlecode.com/svn/trunk</url>
    <repository>
      <root>http://unladen-swallow.googlecode.com/svn</root>
      <uuid>05521daa-c0b4-11dd-bb00-bd6ab96fe29a</uuid>
    </repository>
    <commit revision="1171">
      <author>ebo@4geeks.de</author>
      <date>2010-08-21T18:17:31.382601Z</date>
    </commit>
  </entry>
</file>
</xml_grep>
#

正しい構文は何ですか?

4

1 に答える 1

4

xml_grep、Perl のXML::Twigモジュールを使用する非常に単純なツールです。XPath に似た式に使用できる構文は、そこに記載されています。このような属性の値を抽出することは不可能のようです。

xpath代わりにプログラムを使用することをお勧めします。

$ xpath x '//entry/@path'
Found 1 nodes:
-- NODE --
 path="trunk"

このプログラムは にバンドルされている必要がありXML::Xpathます。


他のすべてが失敗した場合は、自分でロールしてください。私が選んだ武器はXML::LibXML

use strict; use warnings;
use XML::LibXML;

my ($file, $query) = @ARGV;

my $xml = XML::LibXML->load_xml(location => $file);
print $xml->findvalue($query), "\n";

それから$ perl xpath-findvalue.pl x '//entry/@path'。出力: trunk.

于 2013-08-28T19:51:43.923 に答える