Linq to XML,如何在c#中访问元素
本文关键字:访问 元素 to XML Linq | 更新日期: 2023-09-27 18:19:25
这是我需要解析的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>
元素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>
这是一个非法的XML格式,我的朋友不能有冒号
答案在这里如何使用Linq从带有名称空间的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