2009-05-12 16 views
3

Quelqu'un peut-il me aider à lire l'attribut ows_AZPersonnummer avec asp.net en utilisant C# de cette structure xmlattribut de 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> 

et obtenir la valeur 196202081276.

+0

où est le XML? – Jeremy

+0

Plus de détails nécessaires. Quelle structure XML? –

+0

Il était là, juste besoin d'être indenté pour que markdown puisse le voir. –

Répondre

0

Je dirais que vous avez besoin d'un analyseur XML, ce que je crois sont communs. Cela ressemble à une structure XML simple, donc le code de gestion ne devrait pas être trop dur.

6

Ouvrir ce dans un objet XmlDocument, puis utilisez la fonction SelectNode avec la XPath suivante:

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

En gros, cela ressemble pour chaque élément nommé « ligne », quelle que soit la profondeur et de l'espace de noms, et renvoie la ows_AZPersonnummer attribut de celui-ci. Devrait aider à éviter les problèmes d'espace de noms que vous pourriez avoir.

+0

Ok, merci, je vais essayer demain. –

0

Utilisez <% # Eval ("path to attribute")%> mais vous devez charger le xml a un DataSource.

Sinon, vous pouvez le charger en utilisant XmlTextReader. Voici un example.

5

Le XmlNamespaceManager est votre ami:

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); 

Vous pouvez également utiliser LINQ pour XML:

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

J'étais sur le point de poster la version LINQ [la version result1], mais vous êtes plus rapide! La seule différence est que j'utilise .FirstOrDefault() et que je n'ai pas .ToString() à la fin (puisque .Value est une chaîne). La version result2 n'est pas tout à fait correcte. –

+0

Richard ... bien repéré et apprécié, bien que je laisse le First() vs FirstOrDefault() à l'OP pour décider. :) – Kev

+0

Merci Kev, ça marche bien ... –