当XML再次包含相同的元素时,如何使用C#解析XML?

当XML再次包含相同的元素时,如何使用C#解析XML?,c#,xml,xpath,xml-parsing,C#,Xml,Xpath,Xml Parsing,我试图读取一个XML文件,它看起来像 <?xml version="1.0" encoding="UTF-8"?> <MyXML> <SESSION FORM_ID="775938" CID="" ID="HAKKI-LAPTOP_634975758376381105"> <FIELD NAME="A001DATE_M" Y="2.32" X="5.5" WIDTH="7.15" HEIGHT="0.99">First Value</FIEL

我试图读取一个XML文件,它看起来像

<?xml version="1.0" encoding="UTF-8"?>
<MyXML>
<SESSION FORM_ID="775938" CID="" ID="HAKKI-LAPTOP_634975758376381105">
<FIELD NAME="A001DATE_M" Y="2.32" X="5.5" WIDTH="7.15" HEIGHT="0.99">First Value</FIELD>
<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD>
<FIELD NAME="A003" Y="1.11" X="17.83" WIDTH="2.38" HEIGHT="0.99">Third Value</FIELD>
<FIELD NAME="A004" Y="1.11" X="5.5" WIDTH="2.38" HEIGHT="0.99">Fourth Value</FIELD>
</SESSION> 
</MyXML>
要读取第三个或第四个值,需要进行哪些更改

解决方案:(由@DGibbs提供)

使用
[3]
扩展选择器:

XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD[3]");
使用
[3]
扩展选择器:

XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD[3]");

使用LINQ to XML并通过
NAME
属性选择:

XDocument xml = XDocument.Load(fileLocation);

var elem = (from n in xml.Descendants("FIELD")
            where n.Attribute("NAME").Value == "A004"
            select n.Value).FirstOrDefault();
注意,您需要更新XML
字段
元素,因为它们是自动关闭的,并且还有关闭标记

例如:

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99" />Second Value</FIELD>
第二个值
应该是:

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD>
第二个值

使用LINQ to XML并通过
名称
属性选择:

XDocument xml = XDocument.Load(fileLocation);

var elem = (from n in xml.Descendants("FIELD")
            where n.Attribute("NAME").Value == "A004"
            select n.Value).FirstOrDefault();
注意,您需要更新XML
字段
元素,因为它们是自动关闭的,并且还有关闭标记

例如:

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99" />Second Value</FIELD>
第二个值
应该是:

<FIELD NAME="A002" Y="2.32" X="17.83" WIDTH="2.38" HEIGHT="0.99">Second Value</FIELD>
第二个值
您可以使用DGibbs-answer,如果需要所有字段,也可以这样尝试 作为一份清单

将所有的
字段
放入列表中,然后做任何你想做的事情

XDocument xml = XDocument.Load(sXMLPath);

IEnumerable<XElement> elmList = xml.Descendants("FIELD");

foreach (XElement elm in elmList)
{
    // Your Logics goes Here      
}
xdocumentxml=XDocument.Load(sXMLPath);
IEnumerable elmList=xml.subjects(“字段”);
foreach(elmList中的XElement elm)
{
//你的逻辑在这里
}
您可以使用DGibbs-answer,如果需要所有字段,也可以这样尝试 作为一份清单

将所有的
字段
放入列表中,然后做任何你想做的事情

XDocument xml = XDocument.Load(sXMLPath);

IEnumerable<XElement> elmList = xml.Descendants("FIELD");

foreach (XElement elm in elmList)
{
    // Your Logics goes Here      
}
xdocumentxml=XDocument.Load(sXMLPath);
IEnumerable elmList=xml.subjects(“字段”);
foreach(elmList中的XElement elm)
{
//你的逻辑在这里
}

我可以使用此代码检索整个标签。如何仅检索值?请参阅我的编辑。您只需选择我使用
Value
属性检索到的元素的
Value
属性。ThanksI可以使用此代码检索整个标记。如何仅检索值?请参阅我的编辑。您只需选择我使用
Value
属性检索到的元素的
Value
属性。感谢使用这段代码,我需要知道的系列,可能上面的答案会帮助更好。谢谢。对于使用此代码,我需要知道的系列,可能上面的答案将帮助更好。谢谢