繁体   English   中英

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

[英]Pull an Element from XML to C# string

我需要查看一个嵌入到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>

我对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("<?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();

暂无
暂无

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

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