2009-05-12 2 views
3

Может кто-то помочь мне прочитать атрибут ows_AZPersonnummer с asp.net, используя C# из этого XML-структурыатрибут Чтение из 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> 

И получить значение 196202081276.

+0

где же XML? – Jeremy

+0

Более подробная информация. Какая структура XML? –

+0

Это было там, просто нужно было отступить, чтобы уценка могла его увидеть. –

ответ

0

Я бы сказал, что вам нужен XML-анализатор, которые, как я считаю, являются общими. Это выглядит как простая структура XML, поэтому код обработки не должен быть слишком сложным.

6

Открыть в качестве XmlDocument объекта, а затем использовать функцию SelectNode со следующим XPath:

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

В основном, это выглядит для каждого элемента с именем «строка», независимо от глубины и пространства имен, и возвращает ows_AZPersonnummer атрибут. Следует избегать любых проблем с пространством имен, которые могут возникнуть у вас.

+0

Хорошо, спасибо, я попробую завтра. –

0

Использовать <% # Eval ("путь к атрибуту")%> но вам нужно загрузить xml, имеет DataSource.

В противном случае его можно загрузить с помощью XmlTextReader. Вот example.

5

XmlNamespaceManager ваш друг:

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

Вы также можете использовать LINQ к 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

Я собирался опубликовать версию LINQ [версия result1], но вы быстрее! Единственное различие заключается в том, что я использовал .FirstOrDefault(), и я не делаю .ToString() в конце (поскольку .Value - это строка). Версия result2 не совсем правильная. –

+0

Ричард ... хорошо заметил и оценил, хотя я оставлю First() vs FirstOrDefault() для OP, чтобы решить. :) – Kev

+0

Спасибо Kev, он отлично работает ... –