Mit XPath auf eine XML Datei zugreifen

Hallo,

danke für den Hinweis.

Ich konnte es nun so lösen.

Code:
XmlDocument arxmlDocument = new XmlDocument();                      //Speicher reservieren

try
{
     arxmlDocument.Load(this.arxml);                                                //ARXML Datei einlesen

     XmlNamespaceManager arxmlNamespaceManager 
          = new XmlNamespaceManager(arxmlDocument.NameTable);

     string namespaceURI 
          = arxmlDocument.DocumentElement.NamespaceURI;               //Namensraum lesen

     arxmlNamespaceManager.AddNamespace("ns", namespaceURI);      //Prefix für Namensraum festlegen

     XmlNodeList nodeList = arxmlDocument
          .SelectNodes("/ns:AUTOSAR", arxmlNamespaceManager);         //Root-Knoten auswählen

     foreach (XmlNode node in nodeList)
     {
          System.Console.WriteLine(node.Name);                                 //Root-Knoten über Konsole ausgeben
     }
}
catch
{
     throw;
}
finally
{
     arxmlDocument.RemoveAll();                                      //Speicher freigeben
}

Gibt es da was auszusetzen ?
 
Zuletzt bearbeitet:
Warum liest du denn den Namensraum aus dem Dokument aus?

Normalerweise sollte man doch wissen um welche Art von Dokument es sich handelt und ebenfalls den Namensraum kennen um den es geht.

So würdest du beliebige Dokumente verarbeiten, die nicht mal im entferntesten etwas mit deinem eigentlichen Zieldokument zu tun haben...

Gruß
 
Hmm ich bin davon ausgegangen, dass ich die Dokumente, die ich verarbeite letztendlich vorher auf das zugehörige XML-Schema validiere.

Und wollte halt vermeiden in meinem Code zu viele String Literale zu verwenden. Da meckert glaub sonst FxCop ...
 
Hallo,

ich habe aktuell folgende Problemstellung.

Code:
<AR-PACKAGE>
   <ELEMENTS>
      <FRAME/>
      <FRAME/>
      <FRAME/>
   </ELEMENTS>
</AR-PACKAGE>
<AR-PACKAGE>
   <ELEMENTS>
      <SYSTEM-SIGNAL/>
      <SYSTEM-SIGNAL/>
      <SYSTEM-SIGNAL/>
   </ELEMENTS>
</AR-PACKAGE>
<AR-PACKAGE>
   <ELEMENTS>
      <COMPU-METHOD/>
      <COMPU-METHOD/>
      <COMPU-METHOD/>
   </ELEMENTS>
</AR-PACKAGE>

Ich habe als eine Sequenz der Knoten AR-PACKAGE. Jeder Knoten AR-PACKAGE enthält einen Knoten ELEMENTS. Der Knoten ELEMENTS kann entweder eine Sequenz aus FRAME, SYSTEM-SIGNAL oder COMPU-METHOD enthalten kann.

Ist es möglich über X-PATH alle Knoten mit dem Namen FRAME zu erhalten, wenn ich davon ausgehen muss dass die Reihenfolge der AR-PACKAGE Knoten zufällig sein kann oder muss ich hier alle AR-PACKAGE Knoten in einer Schleife (foreach) durchsuchen ?
 
Hi.

Ich verstehe nicht wo das Problem ist. :confused:

Mit
Code:
AR-PACKAGE/ELEMENTS/FRAME
selektierst du alle FRAME Knoten (ausgehend vom Kontextknoten), die unterhalb von AR-PACKAGE und unterhalb von ELEMENTS liegen...

War das deine Frage? :confused:

Gruß
 
Hallo,

also folgender Code gibt eine leere Menge zurück, also eine XmlNodeList mit Count=0.

Code:
XmlNamespaceManager arxmlNamespaceManager = new XmlNamespaceManager(arxmlDocument.NameTable);

string namespaceURI = arxmlDocument.DocumentElement.NamespaceURI; 
              
arxmlNamespaceManager.AddNamespace("ns", namespaceURI);

XmlNodeList frameNodes = arxmlDocument.SelectNodes("/ns:AUTOSAR/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:ELEMENTS/ns:FRAME", arxmlNamespaceManager);

Ich hatte jetzt angenommen, dass dies so ist, weil bei dieser Abfrage nur das erstele Element AR-PACKAGE ausgewertet wird und die Sequence von FRAME nicht im ersten Element AR-PACKAGE enthalten ist.
 
Zuletzt bearbeitet:
Hallo,

also ich habe jetzt mal anstelle von...

Code:
"/ns:AUTOSAR/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:ELEMENTS/ns:FRAME"

... folgenden XPath Ausdruck vervendet.

Code:
"/ns:AUTOSAR/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:ELEMENTS/ns:UNIT"

Dabei ist das XML-Element AR-PACKAGE, das im Child-Element ELEMENTS die Child-Elemente UNIT enthält, das erste (1.) in der Sequence von AR-PACKAGE-Elementen im Element TOP-LEVEL-PACKAGES.

Wenn ich also das Element UNIT addressiere erhalte ich 27 Elemente zurück.
 
Zuletzt bearbeitet:
also ich habe jetzt mal anstelle von...

Code:
"/ns:AUTOSAR/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:ELEMENTS/ns:FRAME"

... folgenden XPath Ausdruck vervendet.

Code:
"/ns:AUTOSAR/ns:TOP-LEVEL-PACKAGES/ns:AR-PACKAGE/ns:ELEMENTS/ns:UNIT"

Dabei ist das XML-Element AR-PACKAGE, das im Child-Element ELEMENTS die Child-Elemente UNIT enthält, das erste (1.) in der Sequence von AR-PACKAGE-Elementen im Element TOP-LEVEL-PACKAGES.
Ja, und?! Was willst du damit sagen?
 
Naja letztendlich wollte ich nachfragen, wie ich den XPath Ausdruck beschreiben muss, damit ich aus einer Sequence aus AR-PACKAGE Elementen das oder die AR-PACKAGEElemente abrufen kann, die als Child-Element von ELEMENTS eine Sequence von FRAME-Elementen hat.
 
Zurück