Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML:读取元素的子元素_C#_Xml - Fatal编程技术网

C# 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

我正在研究将设置存储在XML文件中的可能性。这是我的代码的简化版本。您在这里看不到它,但这段代码位于
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…我现在正在研究序列化。我需要一些时间来弄清楚是否可以实现这个。我试图在程序中实现序列化,但遇到运行时错误。这里有两个截图:我做错了什么?当你得到一个类型反射错误时,看看内部异常;它应该告诉你到底发生了什么。另外,请看,这可能不会告诉您是什么导致了这个错误,但会帮助您解决接下来可能会遇到的问题