使用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元素的数字显示在组合框中。
如果有人有任何建议或知道我的语法有什么错误,请告诉我。我无法在网上找到一个可靠的例子。
答案 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
。