Чтение атрибутов XML в комбинированный список - PullRequest
0 голосов
/ 08 апреля 2011

У меня небольшие проблемы с использованием XmlReader для чтения атрибутов только определенного элемента в XML. Чтобы представить функцию в перспективе, у меня есть выпадающий список, который читает все файлы xmls в папке. Элемент, выбранный в первом комбинированном списке, затем используется в качестве входных данных для XmlReader.

array<String^>^ HashMe::PopulateTCList()
{
    int SelectedFileNum = comboBox1->SelectedIndex;
    array<String^>^ Files = PopulateProjectList();

    array<String^>^ AllTC = gcnew array<String^>(100);
    int number = Files->GetLength(0);

    try
    {
        int x = 0;

        for(int y = 0; y < number; y++)
        {
            String^ File = Files[y];

            if(SelectedFileNum == x)
            {           
                XmlReader^ Reader = XmlReader::Create(File);

                while(Reader->Read())
                {
                    if((Reader->NodeType == XmlNodeType::Element) && (Reader->Name == "TestCycle"))
                    {
                        String^ TCNumber = Reader->ReadElementContentAsString();
                        comboBox2->Items->Add(TCNumber);
                    }
                    else
                    {
                        Reader->ReadToFollowing("TestCycle");
                    }
                }
            }
            x = x +1;
        }
    }
    catch (Exception^ e)
    {
        MessageBox::Show(e->ToString());
    }
return AllTC;
}

XML-макет похож на приведенный ниже:

<?xml version="1.0" encoding="utf-8"?>
<Project Name="test">
  <TestCycle Number="1">
    <Files>
      <FileName File="C:\Users\brandonm\Documents\asd.xps" />
      <HashCode Code="AB-B5-85-EC-FE-C4-E2-41-09-6A-A8-77-69-A9-8D-1F" />
    </Files>
  </TestCycle>
  <Project Name="test">
    <TestCycle Number="2">
      <Files>
        <FileName FileName="C:\Users\brandonm\Documents\asd.xps" />
        <HashCode HashCode="AB-B5-85-EC-FE-C4-E2-41-09-6A-A8-77-69-A9-8D-1F" />
      </Files>
    </TestCycle>
  </Project>
  <Project Name="test">
    <TestCycle Number="3">
      <Files>
        <FileName FileName="C:\Users\brandonm\Documents\asd.xps" />
        <HashCode HashCode="AB-B5-85-EC-FE-C4-E2-41-09-6A-A8-77-69-A9-8D-1F" />
      </Files>
    </TestCycle>
  </Project>
</Project>

Обычно мне нужно, чтобы числа из каждого элемента TestCycle отображались в выпадающем списке.

Если у кого-то есть предложение или он знает, что не так с моим синтаксисом, пожалуйста, дайте мне знать. Я не могу найти надежный пример в Интернете.

1 Ответ

0 голосов
/ 08 апреля 2011

Я не уверен точно, что вы ищете, но вот функция, которая возвращает array<int>^, содержащий все атрибуты TestCycle Number в данном XML-файле:

using namespace System;

array<int>^ ReadTestCycleNumbers(String^ xmlFileName)
{
    using System::Collections::Generic::List;
    using namespace System::Xml::XPath;

    List<int> nums;
    XPathNavigator^ root = XPathDocument(xmlFileName).CreateNavigator();
    for each (XPathNavigator^ nav in root->Select(L"//TestCycle[@Number != '']"))
        nums.Add(int::Parse(nav->GetAttribute(L"Number", String::Empty)));
    return nums.ToArray();
}

Убедитесь, что в вашем проекте есть ссылка на System.Xml.dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...