C# 从XML获取最顶层的父级
如何从XML中获取最顶层的父元素?我需要整个元素及其属性 它不会总是第一行,因为可能会有评论C# 从XML获取最顶层的父级,c#,xml,xpath,linq-to-xml,C#,Xml,Xpath,Linq To 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
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;
詹姆斯
123
违约
我希望有一个var等于所需的结果,正如@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);
}
正如@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);
}
可以使用从父XML元素链向上遍历到根元素。然后给出根元素:
var root = element.AncestorsAndSelf().Last();
如果XElement
包含在某些XDocument
中,则始终可以这样做
var root = element.Document.Root;
但是在您的例子中,您可以直接解析到XElement
,而不用费心创建XDocument
容器。您可以使用它沿着父XML元素链向上走到根元素。然后给出根元素:
var root = element.AncestorsAndSelf().Last();
如果XElement
包含在某些XDocument
中,则始终可以这样做
var root = element.Document.Root;
但是在您的例子中,您可以直接解析到
XElement
,而不用费心创建XDocument
容器。在XML数据模型中,开始标记(包括所有属性)、标记内容和结束标记是单个XML元素对象,因此只请求开始标记是不自然的。我不知道在.NET中有bult函数可以实现这一点,但您可以通过组合标记名和所有属性名-值对的信息来重建开始标记字符串,例如:
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);
在XML数据模型中,开始标记(包括所有属性)、标记内容和结束标记是单个XML元素对象,因此仅请求开始标记是不自然的。我不知道在.NET中有bult函数可以实现这一点,但您可以通过组合标记名和所有属性名-值对的信息来重建开始标记字符串,例如:
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);
如果我理解正确的话,在你的代码
str
中已经引用了“最顶端的父元素”即根元素。如果不是您真正想要的根元素,则发布预期输出。如果我正确理解问题,则在您的代码str
中已经引用了“最顶端的父元素”即根元素。如果期望的输出不是您实际想要的根元素,则发布该输出。使用XmlReader
的内置.NET方法遍历XML树标记以获取标记、属性以获取属性等。但我怀疑这里是否需要它,除非您知道自己在做什么并且需要它,否则最好不要使用这种低级API。使用XmlReader
的内置.NET方法遍历XML树标记以获取标记、属性以获取属性等。但是我怀疑它在这里是必需的,除非你知道你在做什么并且你的需求需要它,否则你最好不要使用它。你可能是指循环体中的属性。Name
和属性。Value
?你可能是指循环体中的属性。Name
和属性。Value
?