在 C# 中将 XML 文件解析为字符串

Parsing XML File To Strings in C#

我正在编写一个程序,我正在尝试从 XML 文件中获取信息,将其分解并将信息存储在 4-5 个不同的字符串中。这是我必须获取 XML 文件的代码。

private void getVersionXML()
{
    sVersionConfigPath = sLocationKey + "Core\config.xml"; //Path to XML File
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(sVersionConfigPath); //Load config.xml
    XmlNodeList xmlNodes = xmlDoc.GetElementsByTagName("PrimaryDatabase");
    foreach (XmlNode xmlNode in xmlNodes)
    {
        label1.Text = xmlNode.SelectSingleNode("database").InnerText; //Breaks Here
    }

}

这是 XML 文件的样子。

<ProgXML>
    <PrimaryDatabase Updating="N">
        <Database Driver="SQL Server" Server="serverName" User="sa" Password="Iyp4kvRIS7Orl+NjkhIjvg==" Database="dbName" Owner="" Port="" UncBase="" ImpUser="" />
        <DataExists Action="Reset" When="5/20/2015 3:17:36 PM" />
        <TableCollection Name="Core" Who="CPUser" ProcessID="0" ProcessName="" Status="Complete" When="5/20/2015 3:17:47 PM" LayoutVersion="39" DataVersion="39" />
        <TableCollection Name="Prog" Who="CPUser" ProcessID="0" ProcessName="" Status="Complete" When="5/20/2015 3:17:47 PM" LayoutVersion="38" DataVersion="38" />
    </PrimaryDatabase>
</ProgXML>

基本上我只是想获取 <Database /> 标签中显示的所有内容并将其存储到字符串中(或者在这种情况下,只是打印到标签以进行调试)。

但是代码在我上面用 "Object reference not set to instance of an object" 的 NullReferenceException 注释的地方中断了。而且我不太确定哪里出错了。任何帮助将不胜感激。谢谢。

您可以使用 Linq2Xml

var xDoc = XDocument.Load(filename);
var dict = xDoc.Descendants("Database")
           .First()
           .Attributes()
           .ToDictionary(x => x.Name, x => x.Value);

如果您希望该值仅用于调试目的,

var str = string.Join("; ", xDoc.Descendants("Database")
                            .First()
                            .Attributes()
                            .Select(x => x.Name + "=" + x.Value));

您的 DataBase 节点没有值,只有 Driver、Server 等属性,...

检索属性值:

 string driver = xmlNode.SelectSingleNode("database").Attributes["Name"] ;

看起来这是一个大写问题,这是您的具体问题:(在 Xml 中是 "Database",在 C# 中是 "database"。)

如前所述,LINQ to Xml 也是当今的必经之路。

此外,如果您只想要元素及其所有内容的原始文本表示,请考虑使用 "OuterXml" 属性。