7

以下のコードを使用して、XML ファイルからノードの値を取得しています。

use XML::XPath;
use XML::XPath::XMLParser;

my $pt1 = XML::XPath->new(filename => 'test1.xml');

my $nodeset = $pt1->find('/file1/table/tname'); 

foreach my $node ($nodeset->get_nodelist) 
{
   print $node->getNodeValue."\n";
}

「test1.xml」の内容は次のとおりです。

<file1>
    <table>
        <tname>_sys_ident</tname>
        <ttype>regular</ttype>
        <col>
            <name>_sys_ident_asp</name>
            <type>varchar(16)</type>
            <fkey>_sys_asp</fkey>
            <attr>PRIMARY KEY</attr>
        </col>
    </table>
</file1>

tname (つまり_sys_ident )の値を出力したい。しかし、上記のコードは何も印刷しません。

for ループ内で次を使用する場合:

print XML::XPath::XMLParser::as_string($node);

次に、次の出力が得られます。

<tname>_sys_ident_asp</tname>

この完全なノード名と値の文字列は必要ありません。ノード値が欲しいだけです。 XML と XPath を試すのはこれが初めてです。私が間違っていることを教えてください。

4

2 に答える 2

9

getNodeValue属性ノード用です。elementsの場合、次のstring_valueメソッドが必要です。

foreach my $node ($nodeset->get_nodelist) 
{
   print $node->string_value."\n";
}
于 2012-04-12T10:20:48.670 に答える
1

xpath については、 /file1/table/tname/text() を試してください

于 2012-04-14T01:34:53.517 に答える