Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PQ: XML-Import verweigert Elemente

Forumthread: PQ: XML-Import verweigert Elemente

PQ: XML-Import verweigert Elemente
16.09.2024 20:02:05
tobias
Hallo,

ich erbitte Hilfe, um mittels PowerQuery eine XML-Datei zu importieren.

Die XML-Datei ist zu groß, deshalb hier der URL (Host: Statistisches Bundesamt):

https://www.klassifikationsserver.de/klassService/thyme/variant/kldb2010

...dort im Downloadbereich: in der Zeile "Stichwörter" die Datei in der Spalte "XML (Claset)" herunterladen.

Evtl. funktioniert auch der direkte Download:

https://www.klassifikationsserver.de/klassService/thyme/variant/download/kldb2010?file=searchWords&type=xml

Folgendes Problem habe ich beim XML-Import: Die für mich relevanten Daten befinden sich innerhalb des ITEMS im Element PROPERTYTEXT.

Die Knoten sehen exemplarisch so aus:



<Item idLevel="5" type="OfficialGrouping" id="11102">
<Property name="Keyword">
<PropertyQualifier name="PlainText" language="DE">
<PropertyText type="Subtitle">acker ackerbauer bau bäuerin er</PropertyText>
<PropertyText type="Content">Ackerbauer/-bäuerin</PropertyText>

</PropertyQualifier>
</Property>
<Property name="Keyword">
<PropertyQualifier name="PlainText" language="DE">
<PropertyText type="Subtitle">acker ackergärtner ackergärtnerin gärtner gärtnerin</PropertyText>
<PropertyText type="Content">Ackergärtner/in</PropertyText>

</PropertyQualifier>
</Property>
</Item>


Mir gelingt es nicht, diese Elemente beim Datentransformieren zu sehen... wo biege ich falsch ab?

Ein exemplarischer CSV-Import befindet sich im der beigefügten Excel-Arbeitsmappe:
https://www.herber.de/bbs/user/172219.zip

Besten Dank für's Drübersehen - ich hoffe, jemand findet die Lösung.

Viele Grüße,
tobias
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PQ: XML-Import verweigert Elemente
16.09.2024 21:51:50
Eifeljoi 5
Hallo
So könnte der M-Code zu deiner XLM Datei aussehen, bitte den Pfad (Y:\kldb2010StichwörterXml\KLDB2010-2019-02-14-Keywords.xml) im M entsprechend anpassen.
Ein direkter Download konnte ich Mangels Zeit auf der Web-Seite nicht finden.
let

S = Xml.Tables(File.Contents("Y:\kldb2010StichwörterXml\KLDB2010-2019-02-14-Keywords.xml"))
in
Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(
Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(
Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.TransformColumnTypes(
S,{{"Attribute:version", type text}, {"Attribute:reference", type text}}), "Classification", {"Label", "Property", "Level",
"Item", "Attribute:type", "Attribute:id"}, {"Label", "Property", "Level", "Item", "Attribute:type", "Attribute:id"}), "Item",
{"Property", "Attribute:idLevel", "Attribute:type", "Attribute:id"}, {"Property.1", "Attribute:idLevel", "Attribute:type.1",
"Attribute:id.1"}), "http://www.w3.org/2001/XMLSchema-instance", {"Attribute:noNamespaceSchemaLocation"},
{"Attribute:noNamespaceSchemaLocation"}), "Property.1", {"Attribute:name"}, {"Attribute:name"}), "Level", {"Level","Attribute:id"},
{"Level.1", "Attribute:id.2"}), "Level.1", {"Level", "Attribute:id"}, {"Level", "Attribute:id.3"}), "Level", {"Level",
"Attribute:id"}, {"Level.1", "Attribute:id.4"}), "Level.1", {"Level", "Attribute:id"}, {"Level", "Attribute:id.5"}), "Level",
{"Attribute:id"}, {"Attribute:id.6"}), "Property", {"PropertyQualifier", "Attribute:name"}, {"PropertyQualifier",
"Attribute:name.1"}), "PropertyQualifier", {"PropertyText", "Attribute:name", "Attribute:language"}, {"PropertyText",
"Attribute:name.2", "Attribute:language"}), "PropertyText", {"Element:Text", "Attribute:type"}, {"Element:Text",
"Attribute:type.2"}), "Label", {"LabelText", "Attribute:qualifier"}, {"LabelText", "Attribute:qualifier"}), "LabelText",
{"Element:Text", "Attribute:language"}, {"Element:Text.1", "Attribute:language.1"})
Anzeige
Stichwort-Einträge? / AW: PQ: XML-Import verweigert Elemente
17.09.2024 08:39:07
tobias
Hallo,

vielen Dank für's Durchsehen und Antworten.

In Deiner Umsetzung kann ich jedoch nicht die - für mich relevanten - Stichwort-Einträge sehen. Ich habe Deinen PQ-Ansatz mal auszugsweise in einer XLSX dargestellt:

https://www.herber.de/bbs/user/172229.xlsx

Zu der ID "11101" sollte ich mehrere Stichwörter sehen können, beispielsweise:

  • Ackerarbeiter/in

  • Erntearbeiter/in

  • Fütterer/Fütterin (Landarbeiter/in)


  • Soweit ich Deine Abfrage bei mir übernommen habe, fehlen mir diese Informationen jedoch im Datenmodell.

    Kannst Du diese Informationen bei Dir erkennen?

    Viele Grüße,
    tobias

    Anzeige
    AW: Stichwort-Einträge? / AW: PQ: XML-Import verweigert Elemente
    17.09.2024 10:24:35
    Eifeljoi 5
    Hallo

    Kar kann ich diese Informationen erkennen.
    Durch die Vielzahl an Datensätzen schwer zu erkennen, dazu muss du im PQ-Editor meine Spalte "Attribute:id.1" entsprechend nach deinen Wünschen filtern.
    Das dürfte aber doch kein Problem sein.
    Welche Spalte mit Begriffen? / AW: Stichwort-Einträge?
    17.09.2024 14:12:00
    tobias
    Hallo,

    vielen Dank für Deine neuerliche Rückmeldung. Das Filtern der Spalte "Attribute:id.1" ist weniger das Problem - ich finde im Datenmodell jedoch nicht die Spalte, in der die Stichwort-Begriffe aufgelistet sind.

    Vorsorglich habe ich Deinen Ansatz noch einmal neu übernommen, nachdem mir der Hinweis von Case gezeigt hatte, wie facettenreich die M-Syntax ist.

    Falls Du Gelegenheit findest, freue ich mich über Deinen Hinweis, in welcher Spalte ich die Begriffe bei Deinem Ansatz finden kann.

    Viele Grüße,
    tobias
    Anzeige
    vom Nadel und Heuhaufen...
    17.09.2024 16:38:25
    Yal
    Was? Eifeljoi liefert dir einen Heuhaufen und Du kommst mit der Nadel nicht zurecht? erstaunlich!

    Sorry, dass ich mich über meinen geschätzten Helfer-Kollegen lustig mache, aber in dem Fall finde ich von Tobias äusserst diplomatisch, sich für den Saustahl an zusammengestapelten M-Code zu bedanken...

    Der Code ausgedröselt sieht so aus (inkl. Hinweis von case für Xml.Document):
    let
    
    S = Xml.Document(File.Contents("Y:\kldb2010StichwörterXml\KLDB2010-2019-02-14-Keywords.xml"))
    S1 = Table.TransformColumnTypes(S,{{"Attribute:version", type text}, {"Attribute:reference", type text}}),
    S2 = Table.ExpandTableColumn(S1, "Classification", {"Label", "Property", "Level", "Item", "Attribute:type", "Attribute:id"}, {"Label", "Property", "Level", "Item", "Attribute:type", "Attribute:id"}),
    S3 = Table.ExpandTableColumn(S2, "Item", {"Property", "Attribute:idLevel", "Attribute:type", "Attribute:id"}, {"Property.1", "Attribute:idLevel", "Attribute:type.1", "Attribute:id.1"}),
    S4 = Table.ExpandTableColumn(S3, "http://www.w3.org/2001/XMLSchema-instance", {"Attribute:noNamespaceSchemaLocation"}, {"Attribute:noNamespaceSchemaLocation"}),
    S5 = Table.ExpandTableColumn(S4, "Property.1", {"Attribute:name"}, {"Attribute:name"}),
    S6 = Table.ExpandTableColumn(S5, "Level", {"Level","Attribute:id"}, {"Level.1", "Attribute:id.2"}),
    S7 = Table.ExpandTableColumn(S6, "Level.1", {"Level", "Attribute:id"}, {"Level", "Attribute:id.3"}),
    S8 = Table.ExpandTableColumn(S7, "Level", {"Level", "Attribute:id"}, {"Level.1", "Attribute:id.4"}),
    S9 = Table.ExpandTableColumn(S8, "Level.1", {"Level", "Attribute:id"}, {"Level", "Attribute:id.5"}),
    S10 = Table.ExpandTableColumn(S9, "Level", {"Attribute:id"}, {"Attribute:id.6"}),
    S11 = Table.ExpandTableColumn(S10, "Property", {"PropertyQualifier", "Attribute:name"}, {"PropertyQualifier", "Attribute:name.1"}),
    S12 = Table.ExpandTableColumn(S11, "PropertyQualifier", {"PropertyText", "Attribute:name", "Attribute:language"}, {"PropertyText", "Attribute:name.2", "Attribute:language"}),
    S13 = Table.ExpandTableColumn(S12, "PropertyText", {"Element:Text", "Attribute:type"}, {"Element:Text", "Attribute:type.2"}),
    S14 = Table.ExpandTableColumn(S13, "Label", {"LabelText", "Attribute:qualifier"}, {"LabelText", "Attribute:qualifier"}),
    S15 = Table.ExpandTableColumn(S14, "LabelText", {"Element:Text", "Attribute:language"}, {"Element:Text.1", "Attribute:language.1"})
    in
    S15

    VG
    Yal
    Anzeige
    AW: Welche Spalte mit Begriffen? / AW: Stichwort-Einträge?
    17.09.2024 18:46:39
    Eifeljoi 5
    Hallo

    Hier ein leicht veränderter M-Code gegenüber der Vorversion.
    Bitte dran denken den Pfad wiederum anzupassen, danke.
    Hoffe das es nun passt.
    let in
    
    Table.TransformColumnTypes(Table.RenameColumns(Table.Sort(Table.RemoveColumns(Table.Distinct(Table.SelectRows(Table.AddColumn(
    Table.RemoveColumns(Table.ExpandTableColumn(Table.ExpandTableColumn(Table.SelectRows(Table.ExpandTableColumn(Table.SelectRows(
    Table.ExpandTableColumn(Table.ExpandTableColumn(Table.ExpandTableColumn(Xml.Document(File.Contents(
    "Y:\kldb2010StichwörterXml\KLDB2010-2019-02-14-Keywords.xml")), "Value", {"Name", "Namespace", "Value", "Attributes"}, {"Name.1",
    "Namespace.1", "Value.1", "Attributes.1"}), "Value.1", {"Name", "Namespace", "Value", "Attributes"}, {"Name.2", "Namespace.2",
    "Value.2", "Attributes.2"}), "Value.2", {"Name", "Namespace", "Value", "Attributes"}, {"Name.3", "Namespace.3", "Value.3",
    "Attributes.3"}), each ([Value.3] > "Classification of Occupations, issue 2010" and [Value.3] >
    "Klassifikation der Berufe, Ausgabe 2010")), "Value.3", {"Name", "Namespace", "Value", "Attributes"}, {"Name.4", "Namespace.4",
    "Value", "Attributes.4"}),each ([Name.4] = "PropertyQualifier")), "Value", {"Name", "Value", "Attributes"}, {"Name.5", "Value.1",
    "Attributes.5"}),"Attributes.2", {"Value"}, {"Value"}),{"Attributes.1", "Attributes", "Attributes.5", "Attributes.4",
    "Attributes.3", "Name", "Namespace", "Name.1", "Namespace.1", "Name.2", "Namespace.2", "Name.3", "Namespace.3", "Name.4",
    "Namespace.4", "Name.5"}),"Benutzerdefiniert", each Text.Start([Value.1], 1) = Text.Lower(Text.Start([Value.1], 1)) and not
    Text.Contains("0123456789", Text.Start([Value.1], 1))), each ([Benutzerdefiniert] = false) and ([Value] > "5" and [Value] >
    "OfficialGrouping"))),{"Benutzerdefiniert"}),{{"Value.1", Order.Ascending}}),{{"Value.1", "STichwort"}, {"Value", "Schlüssel"}}
    ),{{"Schlüssel", Int64.Type}, {"STichwort", type text}})
    Anzeige
    Passt! (super) / AW: Welche Spalte mit Begriffen?
    22.09.2024 18:42:29
    tobias
    Hallo Eifeljoi,

    super, danke! Ja, jetzt passt es. Und danke auch für Deine andere Herangehensweise - sehr spannend, auf welche Weise sich meine Fragestellung lösen lässt!

    Viele Grüße,
    tobias
    AW: vom Nadel und Heuhaufen...
    17.09.2024 16:58:10
    Eifeljoi 5
    Das ist der obersaustall diesen angeblich Stichwort-Begriffe aufgelisteten M-Code
    Wenn man das entpacken des gelieferten Codes nicht kann sollte man es sein lassen.
    Ohne weitere Worte und Kommentare.
    Anzeige
    Danke / AW: vom Nadel und Heuhaufen...
    22.09.2024 18:33:24
    tobias
    Hallo Yal,

    auch Dir meinen Dank für Deine ausführlichen Hinweise - die Lösungsschritte sind für mich sehr hilfreich.

    Ich konnte nunmehr zu diesem Problem eine verständliche Lösung umsetzen.

    Viele Grüße,
    tobias
    Ich denke nur ...
    17.09.2024 17:19:40
    Yal
    Mein lieber Eifeljoi,

    ... die Programmierer von Microsoft, die sicher keine Anfänger sind, haben sich wohl sehr viele Gedanken gemacht, was ein "low code/no code" Umgebung liefern muss, sodass sowohl Lesbarkeit, Nachvollziehbarkeit als auch Pflegbarkeit von eines Transformationsvorhabens im Sinne des Anwenders optimiert werden. Ich verstehe nicht, warum man sich der Aufwand gibt, alle die Vorteile zu vernichten.

    Wo ist der Mehrwert?
    Das ist die Frage, die ich mir jedesmal aufs neu stelle und von Dir gern beantwortet hätte.

    VG
    Yal

    Anzeige
    AW: PQ: XML-Import verweigert Elemente
    16.09.2024 22:47:44
    ralf_b
    let
    
    Quelle = Xml.Document(File.Contents("C:\Users\xxxx\Downloads\KLDB2010-2019-02-14-Keywords.xml")),
    #"Erweiterte Value" = Table.ExpandTableColumn(Quelle, "Value", {"Name", "Value"}, {"Name.1", "Value.1"}),
    #"Erweiterte Value.1" = Table.ExpandTableColumn(#"Erweiterte Value", "Value.1", {"Name", "Value", "Attributes"}, {"Name.2", "Value", "Attributes.1"}),
    #"Gefilterte Zeilen" = Table.SelectRows(#"Erweiterte Value.1", each ([Name.2] = "Item")),
    #"Erweiterte Value1" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Value", {"Name", "Namespace", "Value", "Attributes"}, {"Name.3", "Namespace.1", "Value.1", "Attributes.2"}),
    #"Erweiterte Value.2" = Table.ExpandTableColumn(#"Erweiterte Value1", "Value.1", {"Name", "Namespace", "Value", "Attributes"}, {"Name.4", "Namespace.2", "Value", "Attributes.3"}),
    #"Erweiterte Attributes.1" = Table.ExpandTableColumn(#"Erweiterte Value.2", "Attributes.1", {"Name", "Value"}, {"Name.5", "Value.1"}),
    #"Erweiterte Value2" = Table.ExpandTableColumn(#"Erweiterte Attributes.1", "Value", {"Value", "Attributes"}, {"Value.2", "Attributes.1"}),
    #"Erweiterte Attributes.2" = Table.ExpandTableColumn(#"Erweiterte Value2", "Attributes.1", {"Value"}, {"Value"}),
    #"Gefilterte Zeilen1" = Table.SelectRows(#"Erweiterte Attributes.2", each ([Value] = "Content")),
    #"Andere entfernte Spalten" = Table.SelectColumns(#"Gefilterte Zeilen1",{"Value.1", "Value.2"}),
    #"Gefilterte Zeilen2" = Table.SelectRows(#"Andere entfernte Spalten", each ([Value.1] > "5" and [Value.1] > "OfficialGrouping")),
    #"Neu angeordnete Spalten" = Table.ReorderColumns(#"Gefilterte Zeilen2",{"Value.2", "Value.1"}),
    #"Entfernte Duplikate" = Table.Distinct(#"Neu angeordnete Spalten", {"Value.2"}),
    #"Gefilterte Zeilen3" = Table.SelectRows(#"Entfernte Duplikate", each true)
    in
    #"Gefilterte Zeilen3"
    Anzeige
    Spalte "Value"? / AW: PQ: XML-Import verweigert Elemente
    17.09.2024 08:50:56
    tobias
    Hallo,

    vielen Dank für's Durchsehen.

    Ich scheitere jedoch bereits beim ersten Spalten-Schritt: Die Spalte "Value" kann ich nicht greifen. Die (gelb hinterlegte) Fehlermeldung dazu:

    Expression.Error: Die Spalte "Value" der Tabelle wurde nicht gefunden.
    
    Details: Value


    Bei mir startet die XML mit vier Spalten:

  • Classification [Typ: Table]

  • Attribute:version [Typ: Text]

  • Attribute:reference [Typ: Text]

  • http://www.w3.org/2001/XMLSchema-instance [Typ: Table]


  • Eine Spalte "Value" ist bei mir nicht darunter. Auch wenn ich auf das Table-Feld "Classification" klicke, sehe ich in der Vorschau keine Spalte "Value", nur "Label", "Property", "Level", "Item", "Attribute:type" und "Attribute:id".

    Gibt es beim Laden der XML einen versteckten Haken, damit ich tiefergehende Strukturen gleich miteinlesen kann?

    Oder wie gelingt es Dir, auf diese Spalte zu verweisen?

    Viele Grüße,
    tobias
    Anzeige
    Danke / AW: PQ: XML-Import verweigert Elemente
    17.09.2024 13:56:29
    tobias
    Hallo,

    besten Dank für Deine Umsetzung!

    Ich benötigte jedoch zunächst noch den Ergänzungshinweis von Case - da ich einfach meine Quellen-Zeile stumpf drüberkopiert hatte... den Unterschied "Table" vs. "Document" hatte ich dabei völlig übersehen.

    Nun klappt's endlich!

    Viele Grüße,
    tobias
    Anzeige
    Bei dir ist wahrscheinlich...
    17.09.2024 09:25:46
    Case
    Moin, :-)

    ... beim laden der Quelle noch...
    Quelle = Xml.Tables(...

    ... vorgegeben (das macht PQ automatisch).

    Um die gesamte Baumstruktur zu sehen musst du aber...
    Quelle = Xml.Document(...

    ... nehmen. ;-)

    Also nicht "Tables", sondern "Document".

    Servus
    Case
    Anzeige
    Heureka / AW: Bei dir ist wahrscheinlich...
    17.09.2024 13:59:53
    tobias
    Hallo Case,

    ich danke Dir! Dein Hinweis war wichtig. Ich hatte einfach meine Quellen-Zeile stumpf drüberkopiert und dabei übersehen, dass ich den vollständigen Lösungsansatz hierüber verschlimmbessert hatte.

    Nun passt es endlich.

    Viele Grüße,
    tobias
    ;

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige