2015-08-30 10 views
0
- <entry xml:base="http://testserver.windows.net/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:etag="W/"datetime'2015-08-30T00%3A04%3A02.9193525Z'""> 
    <id>http://testserver.windows.net/Players(PartitionKey='zzz',RowKey='000125')</id> 
    <category term="testServer.Players" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> 
    <link rel="edit" title="Players" href="Players(PartitionKey='zzz',RowKey='000125')" /> 
    <title /> 
    <updated>2014-04-30T00:53:42Z</updated> 
- <author> 
    <name /> 
    </author> 
- <content type="application/xml"> 
- <m:properties> 
    <d:PartitionKey>zzz</d:PartitionKey> 
    <d:RowKey>000125</d:RowKey> 
    <d:Timestamp m:type="Edm.DateTime">2014-04-30T00:04:02.9193525Z</d:Timestamp> 
    <d:Name>Black color</d:Name> 
    <d:Comments>Test comments</d:Comments> 
    </m:properties> 
    </content> 
    </entry> 

Как читать потомки m: properties, используя C# или LINQ. Эта строка XML хранится в переменной типа XElementЧтение дочерних узлов из строки xml с использованием C#, LINQ

ответ

2

Вы можете использовать комбинацию XNamespace + "element local name" ссылаться на элемент в пространстве имен, например:

XElement myxelement = XElement.Parse("your XML string here"); 
XNamespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"; 
List<XElement> properties = myxelement.Descendants(m+"properties").ToList(); 
+0

Еще один вопрос в случае сбора. Я только что опубликовал новый вопрос http://stackoverflow.com/questions/32292975/read-xml-descendants-collection-from-xml-string – Ali

0

Я думаю, что это может показать вам, как использовать Linq для XML

read the data from XML Structure using c#

Если что-то создает проблемы, просто отлаживать немного, посмотрим, что вы получить от L2X операции и переместить шаг глубже дерева данных.

0

Использование Linq2XML

var xDoc = XDocument.Load(filename); 
var dict = xDoc.Descendants("m:properties") 
      .First() 
      .Attributes() 
      .ToDictionary(x => x.Name, x => x.Value); 
0
  1. менеджер пространства имен Setup. Обратите внимание: библиотека .net не поддерживает пространство имен по умолчанию, поэтому я добавил префикс «ns» в пространство имен по умолчанию.

  2. использовать xpath или linq для запроса xml. В следующем примере используется xpath.

      XmlNamespaceManager NamespaceManager = new XmlNamespaceManager(new NameTable()); 
         NamespaceManager.AddNamespace("base", "http://testserver.windows.net/"); 
         NamespaceManager.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices"); 
         NamespaceManager.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"); 
         NamespaceManager.AddNamespace("ns", "http://www.w3.org/2005/Atom"); XDocument doc = XDocument.Parse(XElement); 
    
        var properties = doc.XPathSelectElement("/ns:entry/ns:content/m:properties", NamespaceManager); 
    
Смежные вопросы