C# XML:读取元素的子元素
我正在研究将设置存储在XML文件中的可能性。这是我的代码的简化版本。您在这里看不到它,但这段代码位于C# XML:读取元素的子元素,c#,xml,C#,Xml,我正在研究将设置存储在XML文件中的可能性。这是我的代码的简化版本。您在这里看不到它,但这段代码位于try块中,这样我就可以捕获出现的任何xmleexception XmlReader fileReader = XmlReader.Create(Path.GetDirectoryName(Application.ExecutablePath) + "\\settings.xml"); // Start reading while (fileReader.Read()) { // Onl
try
块中,这样我就可以捕获出现的任何xmleexception
XmlReader fileReader = XmlReader.Create(Path.GetDirectoryName(Application.ExecutablePath) + "\\settings.xml");
// Start reading
while (fileReader.Read())
{
// Only concern yourself with start tags
if (fileReader.IsStartElement())
{
switch (fileReader.Name)
{
// Calendar start tag detected
case "Calendar":
//
//
// Here's my question: can I access the children
// of this element here?
//
//
break;
}
}
}
// Close the XML reader
fileReader.Close();
我可以在代码中放置大注释的地方访问某个元素的子元素吗?查看短文以获得解决方案
顺便说一句,如果您想轻松地使用XML,应该使用LINQ to XML。查看短文以获得解决方案
顺便说一下,如果您想轻松使用XML,应该使用LINQ to XML。您可以在XmlReader上使用以下任何方法:
- ReadSubtree()
- ReadInnerXml()
- ReadOuterXml()
- ReadStartElement()
阅读子内容。您使用哪种方法取决于您希望如何处理所述子内容。您可以在XmlReader上使用以下任何方法:
- ReadSubtree()
- ReadInnerXml()
- ReadOuterXml()
- ReadStartElement()
阅读子内容。您使用哪一个取决于您希望对所述子内容执行的操作。在一些应用程序中,使用
XmlReader
阅读XML文档是正确的答案。除非您有成千上万的用户设置想要读取(您没有),并且不需要更新(您有),否则XmlReader
是错误的选择
既然您说的是希望在XML中存储数组和结构,那么很明显,您希望使用.NET内置的序列化机制。(如果访问XML对您很重要,您甚至可以使用XML作为序列化格式。)有关起点,请参阅
如果您正确地设计了设置类(这并不困难),则可以序列化和反序列化它们,而无需编写了解要序列化的属性的名称和数据类型的代码。访问设置的代码将与如何持久化设置的实现细节完全分离,正如Martha Stewart所说,这是一件好事。有些应用程序使用
XmlReader
读取XML文档是正确的答案。除非您有成千上万的用户设置想要读取(您没有),并且不需要更新(您有),否则XmlReader
是错误的选择
既然您说的是希望在XML中存储数组和结构,那么很明显,您希望使用.NET内置的序列化机制。(如果访问XML对您很重要,您甚至可以使用XML作为序列化格式。)有关起点,请参阅
如果您正确地设计了设置类(这并不困难),则可以序列化和反序列化它们,而无需编写了解要序列化的属性的名称和数据类型的代码。访问设置的代码将与如何持久化设置的实现细节完全分离,正如Martha Stewart所说,这是一件好事。App.config并创建一个自定义部分
App.config并创建自定义节
你真的不应该把问题隐藏在代码中。如果必须的话,至少指出一点。为什么不使用可用的-app.config和用户设置??为什么还要重新发明轮子呢?marc_s:我更喜欢用户设置,但据我所知,它没有保存数组和结构的方法。此外,以XML格式保存设置可以在实现设置对话框之前轻松编辑某些设置。是否要转换XML树(保留某些内容,添加某些内容)?为什么不使用XSLT呢?提供输入示例、所需输出并重新标记为
xslt
,您真的不应该将问题隐藏在代码中。如果必须的话,至少指出一点。为什么不使用可用的-app.config和用户设置??为什么还要重新发明轮子呢?marc_s:我更喜欢用户设置,但据我所知,它没有保存数组和结构的方法。此外,以XML格式保存设置可以在实现设置对话框之前轻松编辑某些设置。是否要转换XML树(保留某些内容,添加某些内容)?为什么不使用XSLT呢?提供输入示例、所需输出并重新标记为xslt
,这也是我的想法。如果你不能使用App.config,那么序列化或者直接使用XPath…我现在正在研究序列化。我需要一些时间来弄清楚是否可以实现这个。我试图在程序中实现序列化,但遇到运行时错误。这里有两个截图:我做错了什么?当你得到一个类型反射错误时,看看内部异常;它应该告诉你到底发生了什么。另外,请参见,它可能不会告诉您导致此错误的原因,但会帮助您解决接下来可能会遇到的问题。问题是由于ArrayList
不是强类型的,因此在其上调用ToArray()
会创建一个对象[]
,您需要一个日历[]
。首先尝试将内容强制转换为日历,例如CalendarDB.Cast().ToArray()
。这也是我的想法。如果你不能使用App.config,那么序列化或者直接使用XPath…我现在正在研究序列化。我需要一些时间来弄清楚是否可以实现这个。我试图在程序中实现序列化,但遇到运行时错误。这里有两个截图:我做错了什么?当你得到一个类型反射错误时,看看内部异常;它应该告诉你到底发生了什么。另外,请看,这可能不会告诉您是什么导致了这个错误,但会帮助您解决接下来可能会遇到的问题