Documentatie/Calc-functies/FILTERXML

From The Document Foundation Wiki
Jump to navigation Jump to search
This page is a translated version of the page Documentation/Calc Functions/FILTERXML and the translation is 100% complete.
Other languages:
English • ‎Nederlands



Functienaam:

FILTERXML

Categorie:

Tekst

Samenvatting:

Past een XPath-expressie toe op een tekenreeks die gestructureerde gegevens bevat die zijn gecodeerd in XML-opmaak, zodat u gemakkelijk interessante gegevens uit de XML-opmaak kunt afleiden.

Extensible Markup Language (XML) is een veelgebruikte opmaaktaal die de opslag en het transport van gegevens kan ondersteunen met behulp van een syntaxis die zowel mensen als computers kunnen lezen. Het ondersteunt de uitwisseling van een grote verscheidenheid aan gegevens op internet en in vele andere omgevingen.

XML Path Language (XPath) is een querytaal die padexpressies (met een niet-XML-syntaxis) gebruikt om delen van een XML-document te selecteren.

De kracht van de functie FILTERXML wordt vergroot bij gebruik in een matrixformule, ofwel door de toetscombinatie Shift+Control+Enter te gebruiken (in plaats van alleen maar Enter) of door het selectievakje Matrix aan te vinken wanneer met behulp van de Functie-assistent. Dit aspect van het gedrag van FILTERXML is vergelijkbaar met dat van de functies in de categorie Matrix van Calc.

Syntaxis:

FILTERXML(XML-document; XPath expressie)

Retourneert:

Retourneert een tekenreeks (of meerdere tekenreeksen indien gebruikt in een matrixformule) die de van belang zijnde afgeleide gegevens bevat.

Argumenten:

XML-document is een tekenreeks (tussen aanhalingstekens) of een verwijzing naar een cel die een tekenreeks bevat, die de XML-opmaak bevat die moet worden gefilterd. De term XML-document wordt gebruikt omdat het voorkomt in de Functie-assistent van Calc en niet bedoeld is om naar een afzonderlijk documentbestand te verwijzen – het hele XML-document is opgenomen in het stringargument of de cel waarnaar wordt verwezen.

XPath expressie is een tekenreeks (tussen aanhalingstekens) of een verwijzing naar een cel die een tekenreeks bevat, die de te gebruiken XPath expressie bevat.

  • Als XML-document of XPath expressie een lege tekenreeks is, retourneert FILTERXML als fout #WAARDE!.
  • Als XML-document geen geldige XML bevat, dan retourneert FILTERXML als fout #WAARDE!.
  • Als XPath expressie geen geldige XPath-reeks bevat, retourneert FILTERXML als fout #WAARDE!.
  • Als zowel XML-document als XPath expressie geldig zijn maar er geen overeenkomende elementen worden gevonden, retourneert FILTERXML als fout Waarde niet beschikbaar (#N/B).

Aanvullende details:

Om FILTERXML effectief te gebruiken, is mogelijk wat meer informatie nodig over XML en XPath. De functie kan worden gebruikt zonder diepgaande kennis van deze ondersteunende technologieën, maar door uw kennis op deze gebieden te verbeteren, kunt u het beste uit FILTERXML halen.

We raden u aan te beginnen met de volgende koppelingen:

Daarnaast zijn er verschillende sites die gratis en nuttige zelfstudies aanbieden over zowel XML als XPath.

Voorbeelden:

Voorbeeld van een gewone bewerking

Beschouw de volgende XML-opmaak, die de fictieve namen en e-mailadressen van de drie leden van een denkbeeldige club bevat:

<members>
<member>
<name>John Doe</name>
<email>sbriacc2@nasigoreng.buzz</email>
</member>
<member>
<name>Jane Doe</name>
<email>7jobelso.57c@bacharg.com</email>
</member>
<member>
<name>Ann Other</name>
<email>2kingmuslehh@elhida.com</email>
</member>
</members>

De XML hierboven is mooi opgemaakt, voor een beter begrip. Kopieer de hele code en voeg deze in als tekst in cel A1 van een leeg Calc-werkblad. Dit proces zal waarschijnlijk een deel van de opmaak van de code verliezen en wat witruimte tussen de XML-tags achterlaten. Dit zou geen enkel verschil moeten maken voor het gedrag van FILTERXML.

Voer de formule =FILTERXML($A$1; "/members/member/name") in een lege cel op hetzelfde blad in. FILTERXML retourneert de tekenreeks "John Doe", de naam van het eerste lid in de lijst met leden. De voorloop "/" van deze XPath-tekenreeks geeft een absoluut locatiepad aan, beginnend bij de hoofdmap van het XML-document.

Voer de formule =FILTERXML($A$1; "//member[2]/name") in een lege cel op hetzelfde blad in. FILTERXML retourneert de tekenreeks "Jane Doe", de naam van het tweede lid in de lijst met leden. De voorloop "//" van deze Xpath-string geeft een relatief locatiepad aan, zodat de vereiste knooppunten overal in het XML-document kunnen liggen.

De substring "[2]" in de XPath-string van het vorige voorbeeld is een voorbeeld van een predikaat. Met XPath kunt u predikaten gebruiken om een specifiek knooppunt of een knooppunt met een specifieke waarde te vinden. Hieronder volgen nog enkele voorbeelden, met resultaten.

Voer de formule =FILTERXML($A$1; "/members/member[last()-1]/email") in een lege cel op hetzelfde blad in. FILTERXML retourneert de tekenreeks "7jobelso.57c@bacharg.com", het e-mailadres van het tweede lid in de lijst met leden. De substring "[last()-1]" is een predikaat dat het voorlaatste member element selecteert dat het kind is van het members element.

Voer ten slotte de formule =FILTERXML($A$1; "//member[position()>2]") in een lege cel op hetzelfde blad in. FILTERXML retourneert de string "Ann Other 2kingmuslehh@elhida.com", met alle beschikbare informatie (naam en e-mailadres) over het derde lid in de lijst. De tekenreeks "[position()>2]" is een predikaat dat niet overeenkomt met de eerste en tweede lidelementen, maar wel met de derde en volgende lidelementen.

Matrix voorbeeld

Cel A1 moet dezelfde XML-opmaak bevatten als in de subsectie #Voorbeeld van een gewone bewerking hierboven.

Selecteer drie lege cellen, die aangrenzend zijn en in dezelfde kolom liggen. Voor de bespreking in dit voorbeeld gaan we ervan uit dat dit de cellen A3, A4 en A5 zijn.

Ga naar de invoerregel en voer de formule in =FILTERXML($A$1, "//name") maar in plaats van gewoon op Enter te drukken bij het voltooien van de invoer van de formule, drukt u in plaats daarvan op Shift+Control+Enter. Hiermee wordt een matrixformule ingevoerd en FILTERXML plaatst de naam van het eerste lid in cel A3, de naam van het tweede lid in cel A4 en de naam van het derde lid in cel A5.

Aangezien deze XML-code informatie over slechts drie leden bevat, zou cel A6, als u aanvankelijk per ongeluk vier cellen had geselecteerd (A3:A6), uiteindelijk de fout Waarde niet beschikbaar weergeven (#N/B).

XML-gegevens van internetbronnen gebruiken via de functie WEBSERVICE

De wiki van de Documentation Foundation biedt een ruimte voor persberichten van LibreOffice-informatie. Deze blog heeft een bijbehorende RSS-feed (Really Simple Syndication) die kan worden gebruikt om het gebruik van FILTERXML te demonstreren, omdat RSS alleen in platte tekst is gestructureerd met XML. De functie WEBSERVICE van Calc kan worden gebruikt om toegang te krijgen tot deze feed en door de twee functies te combineren, wordt het ophalen van gegevens zeer krachtig.

Op het moment van schrijven van dit voorbeeld is de formule =FILTERXML(WEBSERVICE("https://blog.documentfoundation.org/blog/category/press-releases/feed/"); "//channel/title") retourneert de string "Press Releases Archives - The Document Foundation Blog " (hoewel de inhoud van deze string in de toekomst kan variëren).

Bewaar de URL "https://blog.documentfoundation.org/blog/category/press-releases/feed/" in een lege cel, bijvoorbeeld cel D1. Vervolgens retourneert de formule =FILTERXML(WEBSERVICE($D$1); "//channel/item[1]/pubDate") ingevoerd in een andere lege cel een tekenreeks met de publicatiedatum van de meest recente persbericht (bijvoorbeeld "do 13 mei 2021 12:00:27 +0000").

Op een vergelijkbare manier is het ook mogelijk om toegang te krijgen tot informatie over recente wijzigingen in de wiki van The Document Foundation. Bijvoorbeeld de formule =FILTERXML(WEBSERVICE("https://wiki.documentfoundation.org/api.php?hidebots=1&days=7&limit=50&action=feedrecentchanges&feedformat=rss"); "//lastBuildDate") </ code> retourneert een tekenreeks die de laatste builddatum van de wiki geeft (bijvoorbeeld "Sat, 05 Jun 2021 10:01:26 GMT").

De functie WEBSERVICE retourneert als fout #WAARDE! wanneer het geen gegevens voor de opgegeven URL kan vinden / ophalen. Overweeg om de functie ISFOUT te gebruiken om het antwoord van WEBSERVICE op fouten te controleren voordat u het doorgeeft aan FILTERXML.

Gerelateerde LibreOffice-functies:

URL.CODEREN

WEBSERVICE

ODF standaard:

Geen

Gelijkwaardige Excel-functies:

XML.FILTEREN