Linq to XML, как получить доступ к элементу в C #? - PullRequest
0 голосов
/ 05 января 2012

Вот мой XML, который мне нужно проанализировать:

 <root>
         <photo>/filesphoto.jpg</photo>
         <photo:mtime>12</photo:mtime>
         <text>some text</text>
 </root>

Для доступа к элементу <text> я использую этот код:

var doc = XDocument.Parse(xml.Text);
doc.Descendants("text").FirstOrDefault().Value;

Как я могу получить доступ к <photo:mtime>?

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Элемент mtime находится в пространстве имен, сопоставленном с photo.Вы можете получить к нему доступ следующим образом:

var doc = XDocument.Parse(xml.Text);
XNamespace ns = "your nanespace URI goes here"
doc.Descendants(ns + "mtime").FirstOrDefault().Value;

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

 <root xmlns:photo="your nanespace URI goes here">
         <photo>/filesphoto.jpg</photo>
         <photo:mtime>12</photo:mtime>
         <text>some text</text>
 </root>
2 голосов
/ 05 января 2012

это недопустимый формат xml, мой друг, у вас не должно быть двоеточия

0 голосов
/ 05 января 2012

Ответ здесь Как загрузить и получить доступ к данным с Linq в XML из XML с пространствами имен Спасибо за jmh_gr Разбор xml-фрагментов с пространствами имен в XElement:

public static XElement parseWithNamespaces(String xml, String[] namespaces) {
    XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager(new NameTable());
    foreach (String ns in namespaces) { nameSpaceManager.AddNamespace(ns, ns); }
    return XElement.Load(new XmlTextReader(xml, XmlNodeType.Element, 
        new XmlParserContext(null, nameSpaceManager, null, XmlSpace.None)));
}

Используя ваш точный ввод:

string xml = 
"<root>
    <photo>/filesphoto.jpg</photo>
    <photo:mtime>12</photo:mtime>
    <text>some text</text>
</root>";

XElement x = parseWithNamespaces(xml, new string[] { "photo" });
foreach (XElement e in x.Elements()) { 
    Console.WriteLine("{0} = {1}", e.Name, e.Value); 
}
Console.WriteLine(x.Element("{photo}mtime").Value);

Печать:

photo = /filesphoto.jpg
{photo}mtime = 12
text = some text
12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...