首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XDocument Root.Elements()返回null

问XDocument Root.Elements()返回null
EN

Stack Overflow用户
提问于 2015-02-18 17:02:56
回答 2查看 6.1K关注 0票数 3

我试图解析通过运行单元测试生成的xml文件,但是xml.Root.Elements()的结果是null。

这里是xml的一个示例:

代码语言:javascript
复制
<?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,但是对xml.Root的所有Element()和Elements()调用都返回null。

代码语言:javascript
复制
var xml = XDocument.Load(resultFile);
var outcome = xml.Root
    .Element("TestRun")
    .Element("ResultSummary")
    .Attribute("outcome")
    .Value;

我尝试像在this answer中添加名称空间,但仍然得到了相同的结果:

代码语言:javascript
复制
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"),但仍然得到null。

如何读取这个xml文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 17:04:15

首先,XDocument.Root获取XML的根元素。在你的例子中,它是TestRun。

此外,要从本地名称和命名空间获取对象,可以使用XName.Get(string, string)方法:

因此,将代码更改为:

代码语言:javascript
复制
string ns = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";
var outcome = xml.Root
            .Element(XName.Get("ResultSummary", ns))
            .Attribute("outcome")
            .Value;

结果是:失败了

票数 6
EN

Stack Overflow用户

发布于 2015-10-15 18:53:20

获取Namespace的另一种方法是这样的XNamespace ns = xml.Root.GetDefaultNamespace();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28589413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档