从 XML 获取最高父级

Get Top Most Parent From XML

如何从 XML 获取最顶层的父元素?我需要整个元素及其属性。

它不会总是第一行,因为可能会有评论。

string xmlStr = File.ReadAllText(@"C:\Users\GRPAdmin\Desktop\Test.xml");

XElement str = XElement.Parse(xmlStr);
var h1 = str.Parent;
var h2 = str.XPathSelectElements("..").FirstOrDefault();
var h3 = str.XPathSelectElement("..").Parent;
<FILE NAME="ABC" version="14.0.0.112" State="WIP" Template="ABC123" origin="designer">
 <REC NAME="Recipient">
    <FLD NAME="FirstName">James</FLD>  
  </REC>
 <REC NAME="Message">
    <FLD NAME="Key">123</FLD> 
  </REC>
 <REC NAME="Details">
    <FLD NAME="Key">default</FLD>    
  </REC>
</File>

我希望有一个等于 <FILE NAME="ABC" version="14.0.0.112" State="WIP" Template="ABC123" origin="designer"> 的变量作为期望的结果

正如@har07 所说,str 是最顶层的元素。如果你想要属性只是迭代它们

string xmlStr = File.ReadAllText(@"C:\Users\GRPAdmin\Desktop\Test.xml");

var root = XElement.Parse(xmlStr);
foreach (var attribute in root.Attributes())
{
    Console.WriteLine("{0} : {1}", attribute .Name, attribute.Value);
}

您可以使用 XElement.AncestorsAndSelf() to walk up the chain of parent XML elements to the root element. Enumerable.Last 然后给您根元素:

var root = element.AncestorsAndSelf().Last();

如果 XElement 包含在一些 XDocument 中,你总是可以做

var root = element.Document.Root;

但在您的情况下,您直接解析为 XElement 而无需费心创建 XDocument 容器。

在XML数据模型中,开始标签(包括所有属性)、标签内容、结束标签都是单一的XML元素对象,所以只请求是不自然的开始标签。我不知道内置的 .NET 函数可以实现这一点,但您可以通过组合标签名称和所有属性名称-值对的信息来重建开始标签字符串,例如:

string xmlStr = File.ReadAllText(@"C:\Users\GRPAdmin\Desktop\Test.xml");

XElement str = XElement.Parse(xmlStr);
var attributes = String.Join(" ", str.Attributes().Select(o => String.Format("{0}=\"{1}\"", o.Name, o.Value)));
var result = string.Format("<{0} {1}>", str.Name, attributes);
Console.WriteLine(result);

Dotnetfiddle Demo

输出:

<FILE NAME="ABC" version="14.0.0.112" State="WIP" Template="ABC123" origin="designer">