XElement firstParticipant; // A full document with all the bells and whistles. XDocument xDocument = new XDocument( new XDeclaration("1.0", "UTF-8", "yes"), new XDocumentType("BookParticipants", null, "BookParticipants.dtd", null), new XProcessingInstruction("BookCataloger", "out-of-print"), // Notice on the next line that we are saving off a reference to the first // BookParticipant element. new XElement("BookParticipants", firstParticipant = new XElement("BookParticipant", new XComment("This is a new author."), new XProcessingInstruction("AuthorHandler", "new"), new XAttribute("type", "Author"), new XElement("FirstName", new XText("Joe"), new XElement("NickName", "Joey")), new XElement("LastName", "Rattz")), new XElement("BookParticipant", new XAttribute("type", "Editor"), new XElement("FirstName", "Ewan"), new XElement("LastName", "Buckingham")))); foreach (XElement element in firstParticipant. Element("FirstName").Element("NickName").Ancestors()) { Console.WriteLine(element.Name); }
输出
FirstName BookParticipant BookParticipants
注意这个方法
foreach (XElement element in firstParticipant.
Element("FirstName").Element("NickName").Ancestors())
打印出的顺序是由里层父结点向外层父结点
如果打印结果要包含自身结点那么就这么写
foreach (XElement element in firstParticipant.
Element("FirstName").Element("NickName").AncestorsAndSelf())
{
Console.WriteLine(element.Name);
}
打印结果是这样
NickName
FirstName
BookParticipant
BookParticipants
那么以上递归父结点的方法都是由里层向外层显示,还有个方法是把递归顺序倒过来
把上面那个循环的代码改成这样
foreach (XElement element in firstParticipant.Descendants())
那么打印结果就是从外层到里层显示
FirstName
NickName
LastName
相应的,它也有打印息自身的方法,命名差不多,也是XXXXSelf
foreach (XElement element in firstParticipant.DescendantsAndSelf())
打印结果
BookParticipant
FirstName
NickName
LastName