繁体   English   中英

Linq to XML,如何在C#中访问元素?

[英]Linq to XML, how to acess an element in C#?

这是我需要解析的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>

这是xml的非法格式,我的朋友,您不能使用冒号

元素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>

答案是在这里。 如何使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM