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