2009-05-12 21 views
3

Kann mir jemand helfen, lesen Attribut ows_AZPersonnummer mit asp.net mit C# aus dieser XML-Strukturlesen Attribut von xml

<listitems 
    xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" 
    xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" 
    xmlns:rs="urn:schemas-microsoft-com:rowset" 
    xmlns:z="#RowsetSchema" 
    xmlns="http://schemas.microsoft.com/sharepoint/soap/"> 
<rs:data ItemCount="1"> 
    <z:row 
     ows_AZNamnUppdragsansvarig="Peter" 
     ows_AZTypAvUtbetalning="Arvode till privatperson" 
     ows_AZPersonnummer="196202081276" 
     ows_AZPlusgiro="5456436534" 
     ows_MetaInfo="1;#" 
     ows__ModerationStatus="0" 
     ows__Level="1" ows_ID="1" 
     ows_owshiddenversion="6" 
     ows_UniqueId="1;#{11E4AD4C-7931-46D8-80BB-7E482C605990}" 
     ows_FSObjType="1;#0" 
     ows_Created="2009-04-15T08:29:32Z" 
     ows_FileRef="1;#uppdragsavtal/Lists/Uppdragsavtal/1_.000" 
    /> 
</rs:data> 
</listitems> 

und Wert erhalten 196202081276.

+0

wo ist das XML? – Jeremy

+0

Weitere Details benötigt. Welche XML-Struktur? –

+0

Es war dort, musste nur eingerückt werden, damit Markdown es sehen konnte. –

Antwort

0

Ich würde sagen, Sie einen XML-Parser benötigen, was ich glaube, sind üblich. Dies sieht wie eine einfache XML-Struktur aus, daher sollte der Code nicht zu schwer sein.

6

öffnen Sie diese in einem XmlDocument Objekt, verwenden Sie dann die SelectNode Funktion mit der folgenden XPath:

//*[local-name() = 'row']/@ows_AZPersonnummer 

Im Grunde, das sieht für jedes Element „Reihe“ genannt, unabhängig von der Tiefe und Namensraum, und gibt die ows_AZPersonnummer Attribut davon. Sollte helfen, Namensnennprobleme zu vermeiden, die Sie möglicherweise haben.

+0

Ok, danke ich werde es morgen versuchen. –

0

Verwenden Sie <% # Eval ("Pfad zu Attribut")%> aber Sie müssen das XML laden hat eine DataSource.

Andernfalls können Sie es mit XmlTextReader laden. Hier ist ein example.

5

Die XmlNamespaceManager ist dein Freund:

string xml = "..."; //your xml here 
XmlDocument doc = new XmlDocument(); 
doc.LoadXml(xml); 

XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); 
nsm.AddNamespace("z", "#RowsetSchema"); 

XmlNode n = doc.DocumentElement 
       .SelectSingleNode("//@ows_AZPersonnummer", nsm); 
Console.WriteLine(n.Value); 

können Sie auch LINQ to XML verwenden:

XDocument xd = XDocument.Parse(xml); 
XNamespace xns = "#RowsetSchema"; 
string result1 = xd.Descendants(xns + "row") 
      .First() 
      .Attribute("ows_AZPersonnummer") 
      .Value; 
// Or... 

string result2 = 
    (from el in xd.Descendants(xns + "row") 
    select el).First().Attribute("ows_AZPersonnummer").Value; 
+2

Ich war dabei, die LINQ-Version [die Version von result1] zu posten, aber du bist schneller! Der einzige Unterschied ist, dass ich .FirstOrDefault() verwende und nicht .ToString() am Ende (da .Value ist eine Zeichenkette). Die result2-Version stimmt nicht ganz. –

+0

Richard ... gut gesichtet und geschätzt, obwohl ich die First() vs FirstOrDefault() verlassen, um das OP zu entscheiden. :) – Kev

+0

Danke Kev, es funktioniert gut ... –