将XML属性读入组合框

时间:2011-04-08 08:52:01

标签: xml c++-cli

使用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 :(得分:0)

我不确定您正在寻找什么,但这是一个返回array<int>^的函数,其中包含给定XML文件中的所有TestCycle Number属性:

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