XML auslesen

  • C#

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von korni.

    Hi,

    ich benötige mal wieder Hilfe :)

    Das Problem, Auslesen von folgendem xml-code:

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <record xmlns="http://www.loc.gov/MARC21/slim" type="Bibliographic">
    3. <leader>00000pam a2200000 c 4500</leader>
    4. <controlfield tag="001">1171643837</controlfield>
    5. <controlfield tag="003">DE-101</controlfield>
    6. <controlfield tag="005">20191009223345.0</controlfield>
    7. <controlfield tag="007">tu</controlfield>
    8. <controlfield tag="008">181117s2019 gw ||||| |||| 00||||ger </controlfield>
    9. <datafield tag="015" ind1=" " ind2=" ">
    10. <subfield code="a">19,A42</subfield>
    11. <subfield code="z">18,N47</subfield>
    12. <subfield code="2">dnb</subfield>
    13. </datafield>


    Ich versuche mit linq to xml, komme aber nicht weiter.
    Mit

    C#-Quellcode

    1. var book = from data in xelement.DescendantsAndSelf()
    2. where data.Name.LocalName == txtElement.Text
    3. select data;


    bekomme ich zwar dass Elemten "datafield" ausgelesen, aber weiter komme ich nicht.
    Es geht darum, den "Datensatz" aus dem jeweiligen datafield anhand des tag zu finden und dann die jeweiligen subfields getrennt auszulesen.
    Geht das überhaupt?
    Ich muss gestehen, dass ich mit xml bisher kaum zu tun hatte. Die Beispiele aus dem Netz waren auch nicht richtig hilfreich ?(

    Für Tipps wäre ich dankbar.
    ptbberlin

    Verschoben. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    ptbberlin schrieb:

    Sorry, hatte ich vergessen. Txtelement.text enthält lediglich den Namen des Elements, also "datafield". War nur zum Testen.

    also es wird immer nur nach "datafield" gesucht, und niemals nach anderen Xml-Tags?

    ErfinderDesRades schrieb:

    und was würde dann ermittelt?
    Ich möchte ein konkretes, ganz unmissverständliches Daten-Beispiel:
    beim in post#1 gegebenem Xml und Input Sowieso soll Output Sowieso bei rauskommen
    @ErfinderDesRades

    Nein, das Textfeld deshalb, weil ich es mit den verschiedene Element-Namen versucht habe, also neben "datafield" auch mit "subfield".
    Als Ergebnis mit 'datafield' immer nur der gesamte Datensatz, mit 'subfield' kein Ergebnis.

    Auch der Ansatz mit

    C#-Quellcode

    1. private void BtnTest_click(object sender, RoutedEventArgs e)
    2. {
    3. XElement xelement = XElement.Load(txtImput.Text);
    4. IEnumerable<XElement> books = xelement.Elements();
    5. foreach (XElement el in books)
    6. {
    7. LbOutput.Items.Add(el.Element(txtElement.Text));
    8. }
    9. }

    bringt mit beiden Element-Namen kein Ergebnis (aber auch keine Fehlermeldung).
    (txtInput.Text enthält Pfad und Name des xml-Dokuments)
    Es fehlt im XML erstmal ein </record> am Schluss.

    Schau dir mal im Debugging/Laufzeit den Unterschied zwischen xelement.Elements​ und xelement.Descendants​ an.
    Danach kannst du dir dann überlegen wie du an deine "subfield"-Elemente kommen möchtest:
    -> Entweder direkt oder über das übergeordnete "datafield"-Element.