Как можно распечатать значение атрибута вместо содержимого элемента? - PullRequest
3 голосов
/ 17 января 2010

У меня есть 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).Я не понимаю почему, а ты?Я попытался прокомментировать код, чтобы помочь понять, что происходит, но если комментарии неверны, пожалуйста, исправьте меня.Спасибо.

Ответы [ 2 ]

3 голосов
/ 18 января 2010

Предполагая, что вам нужен атрибут wellName всех well дочерних элементов конкретного wave, укажите это в XPath, а не в цикле вручную:

foreach my $n ($xc->findnodes(q<//ns:wave[@waveID='1']/ns:well/@wellName>)) {
    print $n->textContent, "\n";
}
1 голос
/ 17 января 2010

$node->attributes() возвращает список узлов атрибутов.

Альтернативой является получение узла атрибута напрямую с помощью выражения XPath, а не использование XPath, чтобы пройти часть пути, а остальное вручную.

...