Perl 我们如何用分隔符将从XML::LibXMl的FindValue中获取的值分开?
我有一个XML要解析。虽然我能够获取它们,但我不能用分隔符将它们分隔开来以便进一步处理。请告知。我的代码如下Perl 我们如何用分隔符将从XML::LibXMl的FindValue中获取的值分开?,perl,Perl,我有一个XML要解析。虽然我能够获取它们,但我不能用分隔符将它们分隔开来以便进一步处理。请告知。我的代码如下 use XML::LibXML; my $filename = 'Test.xml'; my $parser = XML::LibXML->new(); my $dom = $parser->parse_file($filename); my $root = $dom->documentElement(); my $xpc = XML::LibXML::XPathC
use XML::LibXML;
my $filename = 'Test.xml';
my $parser = XML::LibXML->new();
my $dom = $parser->parse_file($filename);
my $root = $dom->documentElement();
my $xpc = XML::LibXML::XPathContext->new($root);
foreach my $id ($xpc->findnodes('/dataset/chapter'))
{
print $xpc->findvalue('mono/route-list', $id);
print join ",", $xpc->findvalue('mono/route-list', $id);
}
对于两个“打印”语句,我得到了相同的结果,尽管预期的结果是:
眼用口服局部鼻腔注射
眼科、口腔、局部、鼻腔、注射、口腔、口腔、口腔、口腔
xml文件结构如下所示:
<dataset id="5"><title>NDC 11</title>
<chapter id="9"><title>NDC 11</title>
<mono id="310694" mid="145787">
<nam>00173074200</nam>
<route-list>
<list-set-field dbId="25413">
<name>ophthalmic</name>
</list-set-field>
</route-list>
</mono>
<mono id="4128683" mid="536890">
<nam>51079020406</nam>
<route-list>
<list-set-field dbId="25413">
<name>oral</name>
</list-set-field>
</route-list>
</mono>
<mono id="4128743" mid="536930">
<nam>65862007360</nam>
<route-list>
<list-set-field dbId="25413">
<name>topical</name>
</list-set-field></route-list>
</mono>
<mono id="3419599" mid="469070">
<nam>49702021718</nam>
<route-list>
<list-set-field dbId="25413">
<name>nasal</name>
</list-set-field>
</route-list>
</mono>
<mono id="2990346" mid="440470">
<nam>49702022118</nam>
<route-list>
<list-set-field dbId="25413">
<name>injection</name>
</list-set-field>
</route-list>
</mono>
<mono id="2990347" mid="440470">
<nam>49702022144</nam>
<route-list>
<list-set-field dbId="25413">
<name>oral</name>
</list-set-field>
</route-list>
</mono>
<mono id="2990357" mid="440491">
<nam>49702022248</nam>
<route-list>
<list-set-field dbId="25413">
<name>oral</name>
</list-set-field>
</route-list>
</mono>
<mono id="3808911" mid="513570">
<nam>00378410591</nam>
<route-list>
<list-set-field dbId="25413">
<name>oral</name>
</list-set-field>
</route-list>
</mono>
<mono id="4128724" mid="536910">
<nam>60505358306</nam>
<route-list>
<list-set-field dbId="25413">
<name>oral</name>
</list-set-field>
</route-list>
</mono>
</chapter>
</dataset>
ndc11
国家数据中心11
00173074200
眼科的
51079020406
口头的
65862007360
有关时事的
49702021718
鼻腔
49702022118
注射
49702022144
口头的
49702022248
口头的
00378410591
口头的
60505358306
口头的
如果您尝试此代码(注意for循环中的最后一行):
文件说:
findvalue()
…返回结果的文字值
结果不是一个结果。一个结果是匹配标记之间的所有文本
xml在每行末尾都有一个隐藏字符:
<route-list>\n
<list-set-field dbId="25413">\n
<name>ophthalmic</name>\n
</list-set-field>\n
</route-list>\n
……甚至是:
CHAPTER:
for my $chapter ($xpc->findnodes('/dataset/chapter')) {
for my $name_text ($xpc->findnodes('//mono/route-list//name/text()', $chapter)) {
say $name_text;
last CHAPTER;
}
}
看起来你没有得到一个列表,而是一个字符串。@JimDavis,你好,Jim。该怎么解决呢?
<route-list>\n
<list-set-field dbId="25413">\n
<name>ophthalmic</name>\n
</list-set-field>\n
</route-list>\n
CHAPTER:
for my $chapter ($xpc->findnodes('/dataset/chapter')) {
for my $name ($xpc->findnodes('//mono/route-list//name', $chapter)) {
say $name->textContent;
last CHAPTER;
}
}
--output:--
ophthalmic
CHAPTER:
for my $chapter ($xpc->findnodes('/dataset/chapter')) {
for my $name_text ($xpc->findnodes('//mono/route-list//name/text()', $chapter)) {
say $name_text;
last CHAPTER;
}
}