在 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" 属性。
我正在编写一个程序,我正在尝试从 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" 属性。