我有一个像这样的XML文件:
<wave waveID="1">
<well wellID="1" wellName="A1">
<oneDataSet>
<rawData>0.1123975676</rawData>
</oneDataSet>
<well>
我正在尝试使用以下代码打印出wellName属性:
my @n1 = $xc->findnodes('//ns:wave[@waveID="1"]');
# so @n1 is an array of nodes with the waveID 1
# Above you are searching from the root of the tree,
# for element wave, with attribute waveID set to 1.
foreach $nod1 (@n1) {
# $nod1 is the name of the iterator,
# which iterates through the array @n1 of node values.
my @wellNames = $nod1->getElementsByTagName('well'); #element inside the tree.
# print out the wellNames :
foreach $well_name (@wellNames) {
print $well_name->textContent;
print "\n";
}
但是我没有打印出wellName,而是打印出rawData值(例如0.1123975676)。我看不出为什么,可以吗?我试图评论代码以帮助理解发生了什么,但如果评论不正确,那么请纠正我。感谢。
答案 0 :(得分:3)
假设您想要特定wellName
的所有well
子项的wave
属性,请在XPath中表达,而不是手动循环:
foreach my $n ($xc->findnodes(q<//ns:wave[@waveID='1']/ns:well/@wellName>)) {
print $n->textContent, "\n";
}
答案 1 :(得分:1)
$node->attributes()
返回属性节点列表。
另一种方法是直接使用XPath表达式获取属性节点,而不是使用XPath来完成部分工作并手动完成剩下的工作。