我尝试解析通过运行单元测试生成的xml文件,但xml.Root.Elements()
将显示为null。
这是xml的一个示例:
<?xml version="1.0" encoding="UTF-8"?>
<TestRun id="2ece436d-907d-4f59-9c81-0544b2f4f7cd" name="redacted" runUser="redacted" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<TestSettings name="Default Test Settings" id="e00bb4af-1518-4b40-9905-19fa7b190f68">
...
</TestSettings>
<Times creation="2015-02-18T11:47:02.7188640-05:00" queuing="2015-02-18T11:47:03.1819103-05:00" start="2015-02-18T11:47:03.2819203-05:00" finish="2015-02-18T11:47:05.5571478-05:00" />
<ResultSummary outcome="Failed">
<Counters total="74" executed="74" passed="73" error="0" failed="1" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" />
</ResultSummary>
我想要检索<ResultSummary>
outcome
,但Element()
上的所有Elements()
和xml.Root
调用都返回null。
var xml = XDocument.Load(resultFile);
var outcome = xml.Root
.Element("TestRun")
.Element("ResultSummary")
.Attribute("outcome")
.Value;
我尝试添加this answer中的命名空间,但我仍然得到相同的结果:
var xml = XDocument.Load(resultFile);
XNamespace ns = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";
var outcome = xml.Root
.Element(ns + "TestRun")
.Element("ResultSummary")
.Attribute("outcome")
.Value;
此外,我不确定Root
是否应该返回<TestRun>
,我尝试运行xml.Root.Element("ResultSummary")
但我仍然无效。
如何阅读此xml文件?
答案 0 :(得分:5)
首先,XDocument.Root
获取XML树的根元素。在你的情况下,它是TestRun
。
并且,为了从本地名称和命名空间获取对象,您可以使用XName.Get(string, string)
方法:
因此,请将代码更改为:
string ns = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";
var outcome = xml.Root
.Element(XName.Get("ResultSummary", ns))
.Attribute("outcome")
.Value;
结果是: 失败
答案 1 :(得分:2)
获取Namespace
的其他方式与此XNamespace ns = xml.Root.GetDefaultNamespace();