Как получить использование значения атрибута SelectSingleNode?

Я анализирую 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]

  1. XML-файл является сложным файлом. Включенные тысячи ценурозов. Но для каждого из Xpath, ценуроз уникален.

  2. Я загружаю XML-файл в управление TreeView. this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);. Когда treeView1_AfterSelect событие имело место, e.Node.FullPath возвратится как Строковое Значение.

  3. Я анализирую строковое Значение e.Node.FullPath. Затем я получил члена XPath Выше. Затем я пытался найти, какой объект ценуроза был выбран.

Я должен найти значение ценуроза как возвращаемое значение действительно.

13
задан Deduplicator 10 February 2015 в 22:38
поделиться

2 ответа

Вы можете написать

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.

8
ответ дан 2 December 2019 в 00:57
поделиться

Вы можете запрашивать 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;
    }
}
4
ответ дан 2 December 2019 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: