所以我有关于如何从.xml文件中获取一些结果的问题。 我们正在比较我们程序的2个版本,方法是生成一个xml文件,其中包含多个文件与结构的差异:
<Results>
<ElemXDataList>
<Item From="0" To="10" Elements="14511">
<ElemXData>
<Item>
<Line>1</Line>
<Col>0</Col>
<Header>ID</Header>
<Val1>0</Val1>
<Val2>0</Val2>
<Percent>0</Percent>
</Item>
<Item>
...
</Item>
...
</ElemXData>
</Items>
<Item From="10" To="20" Elements="1095">
...
</Item>
...
</ElemXDataList>
</Results>
第一个标签项目的差异从0到10与14511项目,第二个标签项目有1095个项目,差异在10到20之间。所以一个,限制可以在此期间修改,但你明白了。 这将是多个文件的最终.xml文件(将具有相同限制但具有不同数量的元素的项标记,具体取决于多少不同)或者可能是不同的.xml文件并从路径查询它们。 我想减轻测试人员的任务(他们没有编程的背景),所以他们有一个点开始在哪里看,并给他们3个字段的限制“从”和“到”和另一个与元素数量的限制。现在的结果将是真是假,将来我会返回更详细的总结。 任何人都可以告诉我如何实现这一点或者可能从一开始就有所帮助?我是一名具有C#经验的c ++程序员。 感谢您抽出时间阅读这篇长篇文章。
答案 0 :(得分:0)
像这样尝试XML Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<Results>" +
"<ElemXDataList>" +
"<Item From=\"0\" To=\"10\" Elements=\"14511\">" +
"<ElemXData>" +
"<Item>" +
"<Line>1</Line>" +
"<Col>0</Col>" +
"<Header>ID</Header>" +
"<Val1>0</Val1>" +
"<Val2>0</Val2>" +
"<Percent>0</Percent>" +
"</Item>" +
"<Item>" +
"</Item>" +
"</ElemXData>" +
"</Item>" +
"<Item From=\"10\" To=\"20\" Elements=\"1095\">" +
"</Item>" +
"</ElemXDataList>" +
"</Results>";
XElement results = XElement.Parse(xml);
var elemXDataList = results.Descendants("ElemXDataList").FirstOrDefault().Elements("Item").Select(x => new
{
from = (int)x.Attribute("From"),
to = (int)x.Attribute("To"),
elements = (int)x.Attribute("Elements"),
children = x.FirstNode
}).ToList();
var query = elemXDataList.Where(x => (x.from == 0) && (x.to == 10) && (x.elements == 14511)).FirstOrDefault();
}
}
}
答案 1 :(得分:0)
对于轻量级C ++实现/示例,请参见下文。 这是使用免费的opensource pugixml库,可以从http://pugixml.org/
下载#include "pugixml.hpp"
#include <iostream>
#include <string>
int main()
{
pugi::xml_document doc;
if (!doc.load_file("/path/filename.xml")) return -1;
pugi::xpath_query query_tool("//Item");
pugi::xpath_node_set tools = query_tool.evaluate_node_set(doc);
pugi::xpath_query query_From("@From");
pugi::xpath_query query_To("@To");
pugi::xpath_query query_Elements("@Elements");
for (pugi::xml_node tool = tools.first().node(); tool; tool = tool.next_sibling())
{
std::string f = query_From.evaluate_string(tool);
std::string t = query_To.evaluate_string(tool);
std::string e = query_Elements.evaluate_string(tool);
std::cout << f << ", " << t << ", " << e << std::endl;
}
std::cout << "done" << std::endl;
return 0;
}