无法处理包含命名空间的XML文件

时间:2013-03-04 04:26:31

标签: c# linq-to-xml

我有一个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();

没有价值。

然而,如果我省略命名空间并进行处理,它就会起作用。

如何在不从源文件中显式删除命名空间的情况下继续操作?可以以编程方式完成吗?

由于

1 个答案:

答案 0 :(得分: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();