XML :: LibXML синтаксический анализ и быстрый выбор элемента

#perl #xpath #xml-parsing #xml-libxml

#perl #xpath #синтаксический анализ xml #xml-libxml

Вопрос:

Я всегда застреваю на некоторых логических вопросах, когда дело доходит до программирования. Я думаю, это логично и просто, но для меня сложно, поскольку я не могу туда добраться. Я использую XML :: LibXML для анализа XML-файлов. Теперь в следующем коде

 <CommentsCorrectionsList>
<CommentsCorrections RefType="Cites">
<RefSource>Brain Cogn. 2005 Jul;58(2):245</RefSource>
</CommentsCorrections>
<CommentsCorrections RefType="RepublishedIn">
<RefSource>Brain Cogn. 2005 Jul;58(2):246-8</RefSource>
<PMID Version="1">16044513</PMID>
</CommentsCorrections>
<CommentsCorrections RefType="PartialRetractionOf">
<RefSource>Curr Opin Organ Transplant. 2001 Mar;6(1):95-101</RefSource>
</CommentsCorrections>
</CommentsCorrectionsList>
  

Я хочу выбрать commentscorrections для всех других RefType, кроме ‘Cites’. Как мне это сделать. Я думал сделать это, поместив все нужные типы ссылок в другую переменную, а затем используя ее для получения других данных. Правильно ли это, я пробовал с некоторыми фиктивными переменными, такими как следующие

 my $sam = "A" || "B" || "C";

print "test= ";
my $test = <>;
if ($test == $sam) {
print $test;
print "success";} else {
print "NO";}
  

Я знаю, что это может показаться глупым для некоторых из вас, но я пишу программу примерно с месяца и иногда расстраиваюсь, потому что не знаю, что делать. Я пытаюсь многому научиться. Пожалуйста, простите меня, если это действительно глупый вопрос.

Кроме того, я подумал сделать

 if(!($foo->findnodes('CommentsCorrectionList/CommentsCorrections[@RefType="Cites"]'))){
do foreach and get the data
}
  

Но в этом случае, как мне избежать RefType=»Cites» в foreach и сделать его равным другому RefType, который я хочу. Я имею в виду, что я не знаю, можно ли использовать такое логическое значение в операторе foreach . Я пытался найти, а также делал проб и ошибок, но ничего не получалось. Любая помощь приветствуется.

Спасибо.

Ответ №1:

 CommentsCorrectionList/CommentsCorrections[@RefType != "Cites"]
  

Я лично использую спецификацию XPath в качестве ссылки, но там могут быть более дружественные ссылки.

Комментарии:

1. да .. это то, что вылетело у меня из головы. Спасибо за ссылку, это действительно помогает. Спасибо за ikegami.