Wie kann ich die Xpath-Abfrage mit der XML-Bibliothek von R verwenden?

8

Die XML-Datei hat dieses Snippet:

%Vor%

Ich habe versucht, es mit der globalen Suche von xpath zu analysieren und habe es auch mit einem Namespacing versucht:

%Vor%

Sollte der xpath nicht übereinstimmen:

%Vor%     
tommy chheng 06.10.2010, 20:25
quelle

2 Antworten

9

Da der Standardnamespace der NIH ist (dessen URI "http://www.ncbi.nlm.nih.gov" lautet), <PC-XRefData_pmid> (und jedes andere Element in Ihrem XML-Dokument, das kein Namespacepräfix hat) ist in diesem NIH-Namensraum.

Um sie mit einem XPath abzugleichen, müssen Sie Ihrem XPath-Prozessor mitteilen, welches Präfix Sie für den NIH-Namespace verwenden, und Sie müssen dieses Präfix in Ihrem XPath verwenden.

Also, ohne R zu kennen, würde ich versuchen

%Vor%

oder sonst

%Vor%

, da letzteres Namespaces umgeht.

Nur weil das XML-Dokument den NIH-Namespace als Standard deklariert, heißt das nicht, dass der XPath-Prozessor das weiß. Im XML-Informationsmodell sind Namespace-Präfixe nicht von Bedeutung. Wenn ich also ein XML-Dokument analysiere, ist es egal, ob der NIH-Namespace an das Präfix "nih:" oder "snizzlefritz" gebunden ist : "Präfix oder" "(Standard) Präfix. Der XML-Parser oder XPath-Prozessor sollte nicht wissen müssen, welches Präfix an welchen Namespace im XML-Dokument gebunden wurde. Zumal es an verschiedenen Stellen im selben Dokument mehrere verschiedene Präfixe geben kann, die an denselben Namespace gebunden sind ... und umgekehrt. Wenn Sie möchten, dass Ihr XPath-Ausdruck einem Element entspricht, das sich in einem Namespace befindet, müssen Sie diesen Namespace dem XPath-Prozessor deklarieren.

Bearbeiten: Es gibt ein paar Vorbehalte, die von @Jim Pivarski beigetragen wurden:

  • Das "doc" muss ein XML-Knoten sein, kein Dokument (Klasse "XMLNode" oder "XMLInternalElementNode", nicht "XMLDocument" oder "XMLInternalDocument").
  • Zumindest in Jims Version (XML_3.93-0) ist das genannte Argument "Namespaces", nicht "ns".

Wenn also "doc" eine Instanz einer Dokumentenklasse ist, lautet die richtige Lösung:

%Vor%     
LarsH 06.10.2010, 21:49
quelle
1

Dies ist FAQ.

Dies: //PC-XRefData_pmid

Bedeutet: any PC-XRefData_pmid im Dokument unter keinem Namespace oder leerem Namespace

Es bedeutet nicht PC-XRefData_pmid im Dokument unter dem Standard-Namespace

Außerdem ist Ihr Dokumentmuster nicht vollständig, aber Ihr PC-XRefData_pmid -Element scheint unter http://www.ncbi.nlm.nih.gov namespace

zu liegen     
user357812 06.10.2010 21:45
quelle

Tags und Links