Я анализирую xml документ, я должен узнать ценуроз (атрибут) значение (3810).
На основе SelectSingleNode()
. Я нашел, что не легко найти название атрибута, и это - значение.
Я могу использовать этот метод, или я должен переключиться на иначе.
Присоединенный мой код.
Как я могу использовать book
obj для получения значения атрибута3810
для gid
.Спасибо.
Мой файл 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);
}
}
[Обновите 10.06.2010]
XML-файл является сложным файлом. Включенные тысячи ценурозов. Но для каждого из Xpath, ценуроз уникален.
Я загружаю XML-файл в управление TreeView. this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
. Когда treeView1_AfterSelect
событие имело место, e.Node.FullPath
возвратится как Строковое Значение.
Я анализирую строковое Значение e.Node.FullPath
. Затем я получил члена XPath Выше. Затем я пытался найти, какой объект ценуроза был выбран.
Я должен найти значение ценуроза как возвращаемое значение действительно.
Вы можете написать
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
для получения списка всех AttrObj с атрибутом @gid.
Вы можете запрашивать 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;
}
}