XML Linq to XML 的根节点中的属性值

本文关键字:XML 属性 根节点 Linq to | 更新日期: 2023-09-27 18:36:36

在通过linq解析xml到xml时,我遇到了一个奇怪的行为(至少对我来说)。下面是我解析的第一个 xml

`<?xml version="1.0" encoding="UTF-8"?>
 <TestRun>
 <UnitTestResult testName = "Arun" outcome = "i">
 </UnitTestResult>
 <UnitTestResult testName = "Arun1" outcome = "i">
 </UnitTestResult>
 </TestRun>`

我的代码看起来像

XDocument doc = XDocument.Parse(fileContents);
var result = doc.Descendants("UnitTestResult");

以上工作正常。但是,如果我的根节点包含属性,则相同的代码不起作用。可能是什么原因。下面的 XML 示例

<?xml version="1.0" encoding="UTF-8"?>
<TestRun id="7903b4ff-8706-4379-b9e8-567034b70abb" name="inaambika@INBELW013312A 2016-02-26 16:55:14" runUser="STC'inaambika" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
<UnitTestResult testName = "Arun" outcome = "i">
</UnitTestResult>
<UnitTestResult testName = "Arun1" outcome = "i">
</UnitTestResult>
</TestRun>
XDocument doc = XDocument.Parse(fileContents);
var result = doc.Descendants("UnitTestResult");

XML Linq to XML 的根节点中的属性值

下面的

这个不是普通属性,它是默认的命名空间声明:

xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
在根元素

级别声明默认命名空间后,根元素和所有不带前缀的后代元素(在本例中,表示已发布的 XML 中的所有元素)都位于该命名空间中。

您可以使用 XNamespace + 元素本地名称来引用命名空间中的元素:

XDocument doc = XDocument.Parse(fileContents);
XNamespace d = "http://microsoft.com/schemas/VisualStudio/TeamTest/2010"
var result = doc.Descendants(d+"UnitTestResult");