在我之前的问题中,我不明白如何解决我的问题。 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>
要访问该元素,我使用此代码:
var doc = XDocument.Parse(xml.Text);
doc.Descendants("text").FirstOrDefault().Value;
我如何访问?
我试过http://aspnetgotyou.blogspot.com/2010/06/xdocument-or-xelement-with-xmlnamespace.html,
但它被忽略<photo:mtime>
,我需要访问它。
请写一些代码。
答案 0 :(得分:0)
与@BrokenGlass的评论相反,您的XML无效。事实上,您在问题中提供的链接中的技术(用于加载命名空间)工作正常。也许你只是没有根据自己的需要改变示例。这是将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
答案 1 :(得分:0)
试试这个:(你的xml稍微改了一下,参见)
string xml = "<root><photo>/filesphoto.jpg</photo><photoMtime>12</photoMtime><text>some text</text></root>";
var doc = XDocument.Parse(xml);
string value = doc.Descendants("text").FirstOrDefault().Value;
MessageBox.Show(value);