我正在使用 xml 文件在 perl 上编写一个聊天机器人程序,该文件包含每个答案的模式,例如,如果用户引入一个包含模式“你知道迈克尔乔丹”的字符串,则可能的答案之一应该是“谁是迈克尔乔丹?”。xml代码如下。
问题是,我不知道如何提取用户引入的字符串的第二部分,在上面给出的示例中“michael jordan”并将其放在我的输出中???以及做什么
<star/>
并<star index="2"/>
在 XML 中表示 ???
谢谢
<category>
<pattern>you know *</pattern>
<template>
<random>
<li>No, who is?</li>
<li>who is <star/>?</li>
<li>i don't know.</li>
</random>
</template>
</category>
perl 代码:
my $parser = XML::LibXML->new();
my $xmlfile = $parser->parse_file( $ARGV[0] );
my %palabras;
my @respuestas;
$xmlfile = $xmlfile->getDocumentElement();
my @kids = $xmlfile->findnodes('//category');
foreach my $child (@kids) {
my $pattern = $child->findvalue('pattern');
@respuestas = $child->findnodes('template/random/li');
for my $answer (@respuestas) {
push @{ $palabras{$pattern} }, $answer->textContent;
}
}
my $cadena = <STDIN>;
while ( $cadena ne "adios\n" ) {
foreach my $pattern ( keys %palabras ) {
if ( index( uc $cadena, $pattern ) != -1 ) {
@respuestas = @{ $palabras{$pattern} };
my $n = int rand( $#respuestas + 1 );
print $respuestas[$n] . "\n"; #
last;
}
}
$cadena = <STDIN>;
}