2010-12-09 12 views
1

Ich versuche, die folgende XML-Datei zu parsen, und nichts, was ich tue, führt zu irgendetwas anderem als dem root oder dem firstnode.Zugriff auf XML mit Linq nicht möglich

 <?xml version="1.0" encoding="utf-8" ?> 
    <Report {attributes}> 
     <table1> 
      <Detail_Collection> 
       <Detail {attributes} /> 
       <Detail {attributes} /> 
       <Detail {attributes} /> 
      </Detail_Collection> 
     </table1> 
    </Report> 

Ich versuche, eine Liste von Details zu erhalten so, dass ich die Attributwerte bekommen, aber alles, was ich habe Ergebnisse in keine Daten versucht. Meine jüngste Versuch ist dies eine ...

var xml= XDocument.Load(FileDetails.FullName); 
var xml1 = XDocument.Parse(xml.Root.FirstNode.ToString()); 
var xml3 = from e in custs.Root.Elements("Detail") select e; 
var xml4 = from e in xml1.Elements("Detail") select e; 

Verschiedene Versuch

var xml = XDocument.Load(FileDetails.FullName); 
var root = xml.Root; 
var els = root.Descendants("Detail"); 

Die oben zeigt in dem sofortigen Fenster:

root.Descendants ("Detail") {System .Xml.Linq.XContainer.GetDescendants} Name: null self: false System.Collections.Generic.IEnumerator.Current: null System.Collections.IEnumerator.Current: null

Das Problem mit den Attributen im Berichtselement ist:

<Report p1:schemaLocation="Info_x0020_Tickets_x0020_Entered http://domain/ReportServer?%2fInfo+Reporting%2fInfo+Tickets+Entered&rs%3aCommand=Render&rs%3aFormat=XML&rs%3aSessionID=vcvb0p452bb3na45havjes55&rc%3aSchema=True" Name="Info Tickets Entered" textbox9="1247" xmlns:p1="http://www.w3.org/2001/XMLSchema-instance" xmlns="Info_x0020_Tickets_x0020_Entered"> 

Dieses von SQL Server Reporting Server ist, muss ich werde Entferne eins nach dem anderen und finde den Schuldigen.

Dies ist die letzte Lösung für dieses Problem Es kann einen besseren Weg geben, aber sobald die Daten geladen Sie den Namespace nicht leicht entfernen können.

Dies gibt ein neues XML-Dokument zurück, das normal verarbeitet werden kann.

+0

Was sind die Attribute? – SLaks

+0

Das Problem liegt in den Attributen für * Bericht * –

+0

Was sind die Attribute in der XML? – SLaks

Antwort

1

custs.Root.Elements("Detail") Aufruf werden alle <Detail> Elemente zurück, die direkte Kinder der Wurzel (<Report>) Element sind.

Sie müssen Descendants anrufen.

Alternativ können Sie

custs.Root.Element("table1").Element("Detail_Collection").Elements("Detail") 

EDIT nennen: Ihre Elemente wahrscheinlich in einem Namespace (xmlns="..." in der Wurzel) sind.
Sie müssen XLinq für die Elemente in der richtigen Namensraum fragen:

XNamespace ns = "Info_x0020_Tickets_x0020_Entered"; 
var els = root.Descendants(ns + "Detail"); 
+0

Es war der Namensraum - ich hatte zwei Namespaces, ich löschte den zweiten und es funktioniert. –

0
var xml= XDocument.Load(FileDetails.FullName); 
var detailList = xml.Root.Decendants("Detail"); 

Dies gibt Ihnen eine zählbare Sammlung von XElements, die sind alle Detail Elemente in der XML.

+0

Ich habe das versucht, es funktioniert nicht. (Ich aktualisierte weitere Versuche) –

0
string xml = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
<Report foo=""bar""> 
    <table1> 
     <Detail_Collection> 
      <Detail foo=""bar"" /> 
      <Detail foo=""bar"" /> 
      <Detail foo=""bar"" /> 
     </Detail_Collection> 
    </table1> 
</Report>"; 

     var doc = XDocument.Parse(xml); 
     foreach (var desc in doc.Root.Descendants("Detail")) 
     { 
      Console.WriteLine(desc.Attribute("foo").Value); 
     } 
Verwandte Themen