1

我有一个 xml 文件,其结构如下(部分)

 <?xml version="1.0" encoding="UTF-8"?>
    <TestRun id="ee3838c9-a7e2-4ddf-acb1-58589e39422d"  xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
      <TestSettings name="LocalSettings" id="e445106a-c672-4959-94d3-ec8cef9ac7e4">
        <Results>
<UnitTestResult executionId="0e790a10-105f-44b1-a8f7-f72709651c17" testId="ae349466-4276-cfa9-908c-026a8589473b" testName="ValidateEmailAddressAndCompanyCode7" computerName="ACCUREVDEV" duration="00:00:41.4297842" startTime="2013-02-27T23:18:52.0238567-08:00" endTime="2013-02-27T23:19:34.0057439-08:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="0e790a10-105f-44b1-a8f7-f72709651c17">
</UnitTestResult>
<UnitTestResult executionId="e9e7679d-fc39-43b7-a096-819f054a3795" testId="1a808be5-21a5-37c4-5892-2969707ae42f" testName="AccountExtensionSubscriptionWithOneMachineAndThreeSubscriptionsTest_withExpiredMachines" computerName="ACCUREVDEV" duration="00:00:56.1243356" startTime="2013-02-27T23:19:34.0174655-08:00" endTime="2013-02-27T23:20:30.8418287-08:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e9e7679d-fc39-43b7-a096-819f054a3795">
</UnitTestResult>    .............................
...............................

可以看出,涉及一个命名空间

xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"

现在如果我这样做

string source = @"D:\23_18_43.trx";
XDocument xDoc = XDocument.Load(source);           
var xxxx = (from data in xDoc.Descendants("Results")
            select data).Descendants("UnitTestResult").ToList();

没有价值。

然而,如果我省略命名空间并进行处理,它就可以工作。

如果不从源文件中明确删除命名空间,我该如何继续?可以以编程方式完成吗?

谢谢

4

1 回答 1

2

要在 XML 中查找具有默认命名空间的节点,您仍需要使用命名空间搜索该节点。

例如。

XNamespace defaultNs = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010";

然后在您的“查询”中;

var xxxx = (from data in xDoc.Descendants(defaultNs + "Results")
            select data).Descendants(defaultNs +"UnitTestResult").ToList();
于 2013-03-04T04:35:23.787 回答