C# and XML NextSiblling

本文关键字:NextSiblling XML and | 更新日期: 2023-09-27 17:59:47

我需要在XML文件中按属性找到一个节点,并选择该注释的子节点和同级节点。我尝试了下面的代码,但它不起作用,我每次都会得到一个异常:

private void button1_Click(object sender, EventArgs e)
{
        OpenFileDialog theDialog = new OpenFileDialog();
        theDialog.Title = "Open the XML file";
        theDialog.Filter = "INA Files|*.ina";
        theDialog.InitialDirectory = @"C:'";
        if (theDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK);
        {
            string filename = theDialog.FileName;
            XmlDocument xmldoc = new XmlDocument();
            xmldoc.Load(theDialog.FileName);
            XmlNodeList m_nodeSegmentList = xmldoc.SelectNodes("//PROMPT[@Label='OS_F014_SECTION5B']");
            foreach (XmlNode m_nodeSegment in m_nodeSegmentList)
            {
                var nSegment = m_nodeSegment.NextSibling.InnerXml;
            }
          }
}

以下代码在VB中运行得很好,但我无法获得C#来选择具有特定属性的节点下面的节点:

Imports System.Xml
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Dim m_xmld As XmlDocument
        Dim m_nodeSegmentList As XmlNodeList
        'Dim m_nodeSegment As XmlNode
        'Create the XML Document
        m_xmld = New XmlDocument()
        'Load the Xml file
        m_xmld.Load("C:'OS_US_14_0084_F14_O.ina")
        'Get the list of name nodes 
        m_nodeSegmentList = m_xmld.SelectNodes("//PROMPT[@Label='OS_F014_SECTION5B1']")
        'MsgBox(m_nodelist.Count)
        'Loop through the nodes
        For Each m_nodeSegment As XmlNode In m_nodeSegmentList
            Dim nSegment As Integer = m_nodeSegment.NextSibling.InnerXml
            MsgBox(nSegment)
            Dim m_nodeLeg As XmlNode
            m_nodeLeg = m_nodeSegment.ParentNode.NextSibling.NextSibling.NextSibling
            'MsgBox(m_nodeLeg.OuterXml)
            Dim m_nodeEntriesList As XmlNodeList = m_nodeLeg.SelectNodes("//ENTRY")
            For Each m_nodeEntry As XmlNode In m_nodeEntriesList
                MsgBox(m_nodeEntry.OuterXml)
            Next


        Next
    Catch errorVariable As Exception
        'Error trapping
        Console.Write(errorVariable.ToString())
    End Try
End Sub
End Class

C# and XML NextSiblling

在这种情况下,我将使用XMLLinq。我修复了XML,使其有效。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        string XML = "<Root><PROMPT Label='"OS_F014_SECTION5B'">ITINERARY</PROMPT> <GROUP> <ETC> <SECTION> </SECTION> </ETC>  </GROUP> <NUMBER>(1)</NUMBER></Root>";
        private void button1_Click(object sender, EventArgs e)
        {
            XDocument doc = XDocument.Parse(XML);
            var results = doc.Descendants("PROMPT").Where(x => x.Attribute("Label").Value == "OS_F014_SECTION5B"); 
        }
    }
}
​