Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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/0/xml/15.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文档并调用事件处理程序(startElement、text),而不使用堆栈来记住标记的上下文?_C#_Xml_Xml Serialization_Xml Parsing - Fatal编程技术网

如何在C#中解析XML文档并调用事件处理程序(startElement、text),而不使用堆栈来记住标记的上下文?

如何在C#中解析XML文档并调用事件处理程序(startElement、text),而不使用堆栈来记住标记的上下文?,c#,xml,xml-serialization,xml-parsing,C#,Xml,Xml Serialization,Xml Parsing,我有一个XML文档,我正在使用System.XML命名空间的XmlTextReader来解析这个XML文档,我正在调用不同类型节点的事件处理程序,如startElement()、Text等 **while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: { StringBuild

我有一个XML文档,我正在使用System.XML命名空间的XmlTextReader来解析这个XML文档,我正在调用不同类型节点的事件处理程序,如startElement()、Text等

   **while (reader.Read())
    {
        switch (reader.NodeType)
        {
            case XmlNodeType.Element:
            {
                StringBuilder nodeNam = new StringBuilder(reader.Name);
                startElement(nodeNam);**
这里startElement()、text、endElement()等是我自定义创建的事件处理程序。我已经给出了这些事件处理程序的定义。为了记住XML文档中标记的上下文,我使用了堆栈。例如,在startElement()上将标记推入堆栈,并通过从堆栈顶部获取当前上下文来处理该标记的内容(调用text())。后来,当我遇到标签的末端时,我弹出了标签。这就是我实现事件处理程序解析和编码的方式

但我希望在不使用堆栈的情况下实现此解析和事件处理程序创建。 有人能告诉我如何在C#中实现这一点,而不使用堆栈来记住XML文档标记的当前上下文吗。当解析器遇到XML文档的startElement()、endElement()、Text()和startDocument()时,是否有更好的方法来实现XML解析和生成事件处理程序

     IN MY XML PARSING, I JUST WANT TO IDENTIFY startElement(), endElement(), characters(), etc, for each and every node (tag) in the document AND CALL THE EVENT HANDLER FUNCTIONS FOR start of an element (startElement() ), end of an element ( endElement() ), text of the node (characters() ). AND I DONT 

需要更详细的解析。使用XmlTextReader,我必须使用堆栈来记住当前标记的上下文,以便调用相应的事件处理程序函数(startElement()、endElement()、characters()。但我想在不使用堆栈的情况下实现这个事件处理程序调用。有什么简单的方法可以在C#中实现这一点。

另一种方法是查看XPath并使用它来查询XML文档。

不清楚这样的导航在您的情况下是否更简单。有一些很好的工具,如or,可以帮助您创建查询语句并以交互方式测试它们。

使用状态机而不是堆栈。我不知道状态机。请你详细说明一下,或者提供一些有用的链接。在解析XML文档时,我只需要标识标记的开始(并调用startElement()事件处理程序)、标识标记的内容(并调用Text()事件处理程序)、标识标记的结束(并调用endElement()事件处理程序)。在我的XML解析中,我只想为文档中的每个节点(标记)标识startElement()、endElement()、characters()等,并为元素的开始(startElement())、元素的结束(endElement()、节点的文本(characters())调用事件处理程序函数。我不需要更详细的解析。这可以通过使用XmlTextReader实现,但这会强制使用stack来记住当前上下文,以便校准并更正evnt hndlr。但我希望在不使用stack的情况下实现此事件处理程序调用。在C#中有什么简单的方法来实现这一点吗。