C# 如何使用Linq从带有名称空间的XML到XML加载和访问数据

C# 如何使用Linq从带有名称空间的XML到XML加载和访问数据,c#,linq-to-xml,C#,Linq To Xml,在我前面的问题中,我不知道如何解决我的问题。 以下是我需要解析的XML: <root> <photo>/filesphoto.jpg</photo> <photo:mtime>12</photo:mtime> <text>some text</text> </root> 我如何访问? 我试过了, 但是它被忽略了,我需要访问它。 请编写一些代码。

在我前面的问题中,我不知道如何解决我的问题。 以下是我需要解析的XML:

<root>
         <photo>/filesphoto.jpg</photo>
         <photo:mtime>12</photo:mtime>
         <text>some text</text>
 </root>
我如何访问? 我试过了, 但是它被忽略了,我需要访问它。
请编写一些代码。

与@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);
尝试以下方法:(您的xml稍有更改,请参阅)

string xml=“/filesphoto.jpg12一些文本”;
var doc=XDocument.Parse(xml);
字符串值=doc.subjects(“text”).FirstOrDefault().value;
MessageBox.Show(值);

如果它是非法的xml,您不能用Linq to xml解析它-您必须修复您的xml,还要查看您前面问题的答案。xml不正确,这就是您无法解析的原因。如果您不介意,我建议在VS中打开此xml文件,并将
photo:mtime>
替换为
photoMtime>
为什么应用您的方法后会得到不同的xml结果?1
12
2
12
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
 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);