Linq To Xml学习 - 3.查询、更新、删除
[2] Linq To Xml学习 - 3.查询、更新、删除
[3] Linq To Xml学习 - 3.查询、更新、删除
[4] Linq To Xml学习 - 3.查询、更新、删除
函数构造方法
相比之下,函数方法包含用于形成新树的代码、从源树中选择元素和属性并在将其添加到新树中时进行相应的转换。 函数方法如下所示:
XElement root = XElement.Load("Data.xml"); XElement newTree = new XElement("Root", root.Element("Child1"), from att in root.Attributes() select new XElement(att.Name, (string)att) ); Console.WriteLine(newTree);
在本例中,函数示例一点也不比第一个示例简短,而且一点也不比第一个示例简单。 但如果要对一个 XML 树进行很多更改,则非函数方法将变得非常复杂,而且会显得很笨拙。 相比之下,使用函数方法时,您只需形成所需的 XML,嵌入适当的查询和表达式以提取需要的内容。 函数方法生成的代码更易于维护。
请注意,在本例中,函数方法的执行效果可能没有树操作方法好。 主要问题是函数方法创建了更多短生存期的对象。 但是,如果使用函数方法能够提高程序员的效率,则折中也是一种有效的方式。
这是一个很简单的示例,但它显示了这两种方法之间基本原理上的差异。 对于转换较大的 XML 文档,函数方法可以产生更高的效率增益。
向 XML 树中添加元素、属性和节点
下面的方法将子内容添加到 XElement 或 XDocument 中:
方法 说明
Add 在 XContainer 的子内容的末尾添加内容。
AddFirst 在 XContainer 的子内容的开头添加内容。
下面的方法将内容添加为 XNode 的同级节点。 向其中添加同级内容的最常见的节点是 XElement,不过你也可以将有效的同级内容添加到其他类型的节点,例如 XText 或 XComment。
方法 说明
AddAfterSelf 在 XNode 后面添加内容。
AddBeforeSelf 在 XNode 前面添加内容。
示例:
XElement srcTree = new XElement("Root", new XElement("Element1", 1), new XElement("Element2", 2), new XElement("Element3", 3), new XElement("Element4", 4), new XElement("Element5", 5) ); XElement xmlTree = new XElement("Root", new XElement("Child1", 1), new XElement("Child2", 2), new XElement("Child3", 3), new XElement("Child4", 4), new XElement("Child5", 5) ); xmlTree.Add(new XElement("NewChild", "new content")); xmlTree.Add( from el in srcTree.Elements() where (int)el > 3 select el ); // Even though Child9 does not exist in srcTree, the following statement will not // throw an exception, and nothing will be added to xmlTree. xmlTree.Add(srcTree.Element("Child9")); Console.WriteLine(xmlTree);
输出结果:
<Root> <Child1>1Child1> <Child2>2Child2> <Child3>3Child3> <Child4>4Child4> <Child5>5Child5> <NewChild>new contentNewChild> <Element4>4Element4> <Element5>5Element5> Root>
修改 XML 树中的元素、属性和节点
下表汇总了修改元素、元素的子元素或元素属性 (Attribute) 时可以使用的方法和属性 (Property)。
下面的方法修改 XElement。
方法 |
说明 |
---|---|
XElement..::.Parse |
用已分析的 XML 替换元素。 |
XElement..::.RemoveAll |
移除元素的所有内容(子节点和属性)。 |
XElement..::.RemoveAttributes |
移除元素的属性。 |
XElement..::.ReplaceAll |
替换元素的所有内容(子节点和属性)。 |
XElement..::.ReplaceAttributes |
替换元素的属性。 |
XElement..::.SetAttributeValue |
设置属性的值。 如果该属性不存在,则创建该属性。 如果值设置为 null,则移除该属性。 |
XElement..::.SetElementValue |
设置子元素的值。 如果该元素不存在,则创建该元素。 如果值设置为 null,则移除该元素。 |
XElement..::.Value |
用指定的文本替换元素的内容(子节点)。 |
XElement..::.SetValue |
设置元素的值。 |
下面的方法修改 XAttribute。
方法 |
说明 |
---|---|
XAttribute..::.Value |
设置属性的值。 |
XAttribute..::.SetValue |
设置属性的值。 |
下面的方法修改 XNode(包括 XElement 或 XDocument)。
方法 |
说明 |
---|---|
XNode..::.ReplaceWith |
用新内容替换节点。 |
下面的方法修改 XContainer(XElement 或 XDocument)。
方法 |
说明 |
---|---|
XContainer..::.ReplaceNodes |
用新内容替换子节点。 |