自定义XML对象树读取

来源:百度知道 编辑:UC知道 时间:2024/07/01 23:43:17
最近做一个项目要用到的。
和主题相关的XML结构如下:
<Items>
<Item objId="" name="" parentId=""></Item>
...
</Items>
objId是由GUID计算出来的随机唯一串,parentId是该Item的父节点的parentId,对于一个父亲的所有孩子而言name属性各不相同。整个形成一颗树。

TreeNode(Of T As IIdenitiy)是Item节点表示的限定泛型类,IIdenitiy接口有ObjId,Name,ContainerId分别和Item的objId,name,parentId属性对应。同时TreeNode类已实现以下接口:
+Name() As String//访问Name字段
+Elem() As T//访问其中的IIdenitiy对象
+Level() As Integer//获取节点所在的层数,顶层为0层
+ChildNodes(Optional ByVal onlyRoot As Boolean = True) As IDictionary(Of String, TreeNode(Of T))//获取节点的孩子节点,如果onlyRoot为false则递归获取子树的孩子节点
+getChildNodeByName(ByVal name As String) As TreeNode(Of T)//通过name属性获取孩子节点,非递归
+ParentNode() As TreeNode(Of T)//访问该节点的父节点
+Property Path() As String//获取该节点的绝对路径
+Property Id() As String//获取该节点的ID属性
+addChild(ByVal treeNode As TreeNode(Of T), Optional ByVal usingNewObjId As Boolean = True) As String//添加一个子节点,如usingNewObjI

其实你只要两个功能就够了

37.读取XML数据库
//using System.Xml;
XmlDocument doc=new XmlDocument();
doc.Load(%%1);
string %%9;
XmlElement xe=doc.GetElementById(%%7);
XmlNodeList elemList=xe.ChildNodes;
foreach(XmlNode elem in elemList)
{
if(elem.NodeType==%%8)
{
%%9=elem.Value;
break;
}
}

38.写入XML数据库
//using System.Xml;
XmlDocument doc=new XmlDocument();
doc.Load(%%1);
XmlNode root=doc.DocumentElement;
XmlElement book=doc.CreateElement(%%3);
XmlElement book=doc.CreateElement(%%5);
XmlElement port=doc.CreateElement(%%6);
book.SetAttribute(%%4,root.ChildNodes.Count.ToString());
author.InnerText=%%8;
book.appendChild(author);
book.appendChild(port);
root.appendChild(book);
doc.Save(%%1);

好难呀
问题解决没,不行去CSDN吧

你可以仔细考虑一下:
1. 你自己用Linq + XElement的效率高还是用系统提供的XmlDocument的效率高。
2. 你的代码的维护成本多高,以后修改难度多大。