xml

  • Allgemein

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von aligator.

    hi
    ich komm bei dieser XML nicht weiter.

    XML-Quellcode

    1. <grammar xmlns="http://www.w3.org/2001/06/grammar"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.w3.org/2001/06/grammar
    4. http://www.w3.org/TR/speech-grammar/grammar.xsd"
    5. xml:lang="de-DE" version="1.0">
    6. <rule id="thema" scope="public">
    7. <one-of>
    8. <item>BlaBla</item>
    9. </one-of>
    10. </rule>
    11. </grammar>


    ich will des BlaBla auslesen.

    hab mir überlegt, dass man erst zur ID muss. ist des mit

    VB.NET-Quellcode

    1. xml.GetElementById("thema")


    richtig?
    wie mach ich dann weiter?

    wie geht des?
    :P Mfg Aligator :P

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

    VB.NET-Quellcode

    1. Dim XDoc1 As XDocument = XDocument.Load("deine xml datei")
    2. dim var1 as string = XDoc1.<grammar>.<rule>.<one-of>.<item>.Value

    würde ich jetzt so grob behaupten^^
    nutzen? var1 ist der name der variable und enthält die value von dem zuvor angegebenen xml node

    ps: gibt auch andere wege aber ich habs mir so angewöhnt, is find ich einfacher ^^
    der knoten :)
    also die stelle hier: <grammar>.<rule>.<one-of>.<item>
    und das .Value sagt dem das er den wert von grammar->rule->one-of->item auslesen soll *also das zwischen <item> und </item>*
    ok, das hab ich kapiert. aber bei welchem befehl muss ich dann var1 angeben. hab schon mehrere ausprobiert. aber es klappt nicht.

    und wenn ich mehrere itmes hab also so:

    <item>BlaBla</item>
    <item>BlaBla</item>
    <item>BlaBla</item>
    <item>BlaBla</item>
    <item>BlaBla</item>


    gibt er mir dann ne liste/array oder wie geht des?

    sorry für die viele (dummen) fragen
    :P Mfg Aligator :P
    Vielleicht sagst Du mal etwas genauer wie Deine XML-Datei aussieht und welche Elemente Du genau daraus brauchst:
    - Willst Du die Werte aller Items
    - oder die items von rules mit bestimmten ids, hier (<rule id="thema" scope="public">)
    - können unter 1 rule mehrere items liegen ?
    - oder etwas ganz anderes

    ... und nein, der obige Code funktioniert nicht, aber da ich mit XmlDocument (.Net 2.0) arbeite und nicht mit dem LinQ XDocument (.Net 3.5), kann ich Dir nicht sagen weshalb. Beim XmlDocument sind Dokumente mit Default-Namespace immer etwas unschön, kA ob es da auch beim XDocument Probleme gibt ...
    ok:

    XML-Quellcode

    1. <grammar xmlns="http://www.w3.org/2001/06/grammar"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.w3.org/2001/06/grammar
    4. http://www.w3.org/TR/speech-grammar/grammar.xsd"
    5. xml:lang="de-DE" version="1.0">
    6. <rule id="thema" scope="public">
    7. <one-of>
    8. <item>BlaBla1</item>
    9. <item>BlaBla2</item>
    10. <item>BlaBla3</item>
    11. <item>BlaBla4</item>
    12. </one-of>
    13. </rule>
    14. </grammar>


    so sieht die aus. und ich möchte die einzelnen items auslesen.
    also:

    BlaBla1BlaBla2BlaBla3BlaBla4

    und neu hinzufügen/löschen oder auch bearbeiten.

    edit:
    die items von rules mit bestimmten ids könnte ich auch gebrauchen.
    :P Mfg Aligator :P

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

    aligator schrieb:

    die items von rules mit bestimmten ids könnte ich auch gebrauchen.

    Ich glaub ich schreibe Dir lieber eine Antwort bevor die Wunschliste noch grösser wird :rolleyes:

    Allerdings mit dem Code für ein System.Xml.XmlDocument, welches sich so ziemlich genauso bearbeiten lässt wie ein HtmlDocument. Näheres kannst Du in MSDN nachlesen. Hier mal der Beispielcode:

    VB.NET-Quellcode

    1. xmlDoc.Load("meineDatei.xml")
    2. ' XmlNamespaceManager für den Default-Namespace
    3. Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
    4. nsmgr.AddNamespace("x", "http://www.w3.org/2001/06/grammar")
    5. ' alle <item> elemente unter rule mit einer bestimmten id
    6. Dim nodes As XmlNodeList = xmlDoc.SelectNodes("//x:rule[@id='thema']/x:one-of/x:item", nsmgr)
    7. ' oder halt alle elemente mit <item> tag
    8. ' Dim nodes As XmlNodeList = xmlDoc.SelectNodes("//x:rule/x:one-of/x:item", nsmgr)
    9. ' elemente ausgeben / verändern
    10. For Each node As XmlNode In nodes
    11. Trace.WriteLine(node.InnerText)
    12. ' anderen wert zuweisen
    13. ' node.InnerText &= "neu"
    14. Next
    15. Trace.WriteLine(nodes.Count)
    16. ' abspeichern
    17. xmlDoc.Save("meineneueDatei.xml")
    danke, jetzt wird mir die sache langsam klarer.
    ob nun des System.Xml.XmlDocument für 2.0 oder des für 3.5 is mir erstmal egal, hauptsache es geht...

    edit:
    also wenn ich

    xmlDoc.SelectNodes("//x:rule/x:one-of/x:item", nsmgr)
    verwende, werden mir dann alle die in item sind, unabhäängig von der id ausgegeben?
    :P Mfg Aligator :P

    aligator schrieb:

    verwende, werden mir dann alle die in item sind, unabhäängig von der id ausgegeben

    Ja, probiers doch einfach aus.

    xml.SelectNodes wird verwendet um mit XPath gezielt bestimmte Elemente in Deiner Datei auszuwählen. Wenn Du einfach nur alle <item> elemente haben möchtest, so kannst Du entweder
    - Dim nodes As XmlNodeList = xmlDoc.SelectNodes("//x:rule/x:one-of/x:item", nsmgr)
    - oder Dim nodes As XmlNodeList = xmlDoc.SelectNodes("//x:item", nsmgr)

    angeben, es kommt das Gleiche dabei raus.
  • 3 Benutzer haben hier geschrieben