将元素从XML拉入C#字符串

将元素从XML拉入C#字符串,c#,xml,string,linq,C#,Xml,String,Linq,我需要查看嵌入到VS项目中的XML文档(使用2013),并提取特定元素作为应用程序中的字符串使用。我曾尝试使用XMLReader、XmlDocument和LINQ,但由于某些原因,我不知道如何将元素拉入代码中。到目前为止,我还没有发现MSDN有什么帮助,我已经在谷歌上搜索了几个小时。我从来没有在C#中构建过使用外部文件的应用程序,我真的可以在如何实现这一点上使用一些指导?以下是我尝试过的最后一件事: XmlDocument doc = new XmlDocument();

我需要查看嵌入到VS项目中的XML文档(使用2013),并提取特定元素作为应用程序中的字符串使用。我曾尝试使用XMLReader、XmlDocument和LINQ,但由于某些原因,我不知道如何将元素拉入代码中。到目前为止,我还没有发现MSDN有什么帮助,我已经在谷歌上搜索了几个小时。我从来没有在C#中构建过使用外部文件的应用程序,我真的可以在如何实现这一点上使用一些指导?以下是我尝试过的最后一件事:

        XmlDocument doc = new XmlDocument();
        doc.Load(@"XML FILEPATH");

        // Create an XmlNamespace Manager to resolve the default namespace
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace("cfg","urn:config-schema");

        XmlNode writeDir;
        XmlElement root = doc.DocumentElement;
        writeDir = root.SelectSingleNode("descendant::cfg:write_directory",nsmgr);

        Console.WriteLine(writeDir.OuterXml);
        Console.ReadLine();
我的XML如下所示:

        <?xml version="1.0" encoding="utf-8" ?>
          <settings smlns="urn:config-schema">
            <write_directory>"WRITEDIRECTORYLOCATION"</write_directory>
            <read_directory>"READDIRECTORYLOCATION"</read_directory>
          </settings>

“WRITEDIRECTORYLOCATION”
“READDIRECTORYLOCATION”

我在XML方面没有太多的经验,所以请原谅我的疏忽。谢谢大家

首先,正如Marc在评论中指出的,您的名称空间声明是错误的:
smlns
应该是
xmlns

第二,我有两个例子告诉你如何检索数据。第一个示例检查元素是否存在,然后检索它们的值。如果不确定文件中是否存在元素,可以使用此示例:

XDocument doc = XDocument.Load(@"D:\Temp\file.xml");
if (doc.Root != null)
{
    XElement writeDirectoryElement = doc.Root.Elements().FirstOrDefault(e => e.Name.LocalName == "write_directory");
    XElement readDirectoryElement = doc.Root.Elements().FirstOrDefault(e => e.Name.LocalName == "read_directory");
    string writeDirectory = writeDirectoryElement != null ? writeDirectoryElement.Value : "";
    string readDirectory = readDirectoryElement != null ? readDirectoryElement.Value : "";
}
如果您确实知道这两个值都存在,则应使用我的第二个示例:

XDocument doc = XDocument.Load(@"D:\Temp\file.xml");
string write_directory = doc.Root.Elements().FirstOrDefault(e => e.Name.LocalName == "write_directory").Value;
string read_directory = doc.Root.Elements().FirstOrDefault(e => e.Name.LocalName == "read_directory").Value;

请提供有关您的问题的更多信息。你的代码现在有什么问题

请考虑下面的代码。它的全部工作和打印输出:“WRITEDIRECTORYLOCATION”

var doc=new XmlDocument();
doc.LoadXml(“\”WRITEDIRECTORYLOCATION\”READDIRECTORYLOCATION\”);
//创建XmlNamespace管理器以解析默认命名空间
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace(“cfg”,“urn:config schema”);
xmlnodewritedir;
XmlElement根=doc.DocumentElement;
writeDir=root.SelectSingleNode(“后代::cfg:write_目录”,nsmgr);
Console.WriteLine(writeDir.InnerText);
Console.ReadLine();

smlns
是打字错误吗?因为在编写时,它没有声明xml名称空间
        var doc = new XmlDocument();
        doc.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\" ?><settings xmlns=\"urn:config-schema\"><write_directory>\"WRITEDIRECTORYLOCATION\"</write_directory><read_directory>\"READDIRECTORYLOCATION\"</read_directory></settings>");

        // Create an XmlNamespace Manager to resolve the default namespace
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace("cfg", "urn:config-schema");

        XmlNode writeDir;
        XmlElement root = doc.DocumentElement;
        writeDir = root.SelectSingleNode("descendant::cfg:write_directory", nsmgr);

        Console.WriteLine(writeDir.InnerText);
        Console.ReadLine();