1

次のような 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>

3番目の値を読み取ろうとしています。私のコードは最初の値を取得できます。

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(sXMLPath);
XmlNode node = xmlDoc.SelectSingleNode("MyXML/SESSION/FIELD");
if (node != null)
{
     MessageBox.Show(node.InnerText);
}

3 番目または 4 番目の値を読み取るには、どのような変更を加える必要がありますか?

解決策: (@DGibbs 提供)

XDocument xml = XDocument.Load(sXMLPath);
var elem = (from n in xml.Descendants("FIELD")
            where n.Attribute("NAME").Value == "A004"
            select n).FirstOrDefault();
MessageBox.Show(elem.Value);
4

3 に答える 3

5

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();

FIELDXML要素は自己終了であり、終了タグも含まれているため、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>
于 2013-09-04T12:55:44.547 に答える
1

リストとしてすべてのフィールドが必要な場合は、DGibbs の回答を使用するか、このように試すことができます。

すべてFIELDSをリストに入れて、好きなことをしてください。

XDocument xml = XDocument.Load(sXMLPath);

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

foreach (XElement elm in elmList)
{
    // Your Logics goes Here      
}
于 2013-09-04T13:03:37.437 に答える