如何从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">
的var作为期望的结果
答案 0 :(得分:2)
您可以使用XElement.AncestorsAndSelf()
将父XML元素链向上移动到根元素。 Enumerable.Last
然后给你根元素:
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);
}
如果某些var root = element.AncestorsAndSelf().Last();
包含XElement
,您可以随时
XDocument
但在您的情况下,您直接解析为var root = element.Document.Root;
而无需创建XElement
容器。
答案 1 :(得分:2)
在XML数据模型中,开始标记(包括所有属性),标记内容和结束标记是单个XML元素对象,因此仅请求开始标记是不自然的。我不知道有一个bult-in .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">
答案 2 :(得分:0)
A1B2C3