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
在这种情况下,我将使用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");
}
}
}