Xmlドキュメントを解析しています。gid(属性)値(3810)を見つける必要があります。
SelectSingleNode()
に基づきます。属性名とその値を見つけるのは簡単ではないことがわかりました。
この方法を使用できますか、それとも別の方法に切り替える必要がありますか。
添付されているのは私のコードです。
book
objを使用してgid
の属性value _3810
_を取得するにはどうすればよいですか。ありがとうございました。
以下のような私のtest.xmlファイル
_<?xml version="1.0" ?>
<root>
<VersionInfo date="2007-11-28" version="1.0.0.2" />
<Attributes>
<AttrDir name="EFEM" DirID="1">
<AttrDir name="Aligner" DirID="2">
<AttrDir name="SequenceID" DirID="3">
<AttrObj text="Slot01" gid="3810" unit="" scale="1" />
<AttrObjCount value="1" />
</AttrDir>
</AttrDir>
</AttrDir>
</Attributes>
</root>
_
私はtest.csを以下のように書きました
_public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlNode book;
XmlNode root = doc.DocumentElement;
book = root.SelectSingleNode("Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]");
Console.WriteLine("Display the modified XML document....");
doc.Save(Console.Out);
}
}
_
[2010年6月10日更新]
Xmlファイルは複雑なファイルです。何千ものギッドが含まれています。ただし、Xpathごとに、gidは一意です。
XmlファイルをTreeViewコントロールにロードします。 this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
。 _treeView1_AfterSelect
_イベントが発生すると、_e.Node.FullPath
_は文字列値として返されます。
文字列値_e.Node.FullPath
_を解析します。次に、XPathAboveのメンバーを取得しました。次に、どのgidアイテムが選択されているかを見つけようとしました。
確かに戻り値としてgid値を見つける必要があります。
あなたは書ける
XmlAttribute gidAttribute = (XmlAttribute)book.Attributes.GetNamedItem("gid");
String gidValue = null;
if (gidAttribute!=null)
value = gidAttribute.Value;
または、Xpathを展開して、属性をフェッチします。
Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]/@gid
@gidが一意の場合は、Xpathを使用するだけです。
"//AttrObj[@gid='3810']"
指定されたIDで目的のノードをフェッチします。ただし、各リクエストはドキュメント全体を検索することに注意してください。すべてのノードをフェッチしてから、idでキー設定されたマップに配置する方が効率的です。
"//AttrObj[@gid]"
使用する XmlNode.SelectNodes
@ gid属性を持つすべてのAttrObjのリストをフェッチします。
XmlDocument
ではなくDocumentRoot
自体をクエリできます。
XmlDocument doc = new XmlDocument();
XmlNode book = doc.SelectSingleNode("..");
if (book != null)
{
XmlAttribute gid = book.Attributes["gid"];
if (gid != null)
{
string value = gid.Value;
}
}
ここでの問題は、XPathがすべて間違っていたことです。あなたはこれを持っていました:
Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]
これは、すべての名前が一致したかどうかに応じて、Attributes要素を選択するかどうかを選択します。このXPathを使用すると、必要なgid属性に直接移動できます。
Attributes/AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']/@gid