0 0

如何通过递归生成xml树,求解0

想了好久都没想到,现在有个需求,有一个树型结构的表,需要将它生成XML树
结构如下:
<treeElement id="13eb1d48892436e0489e98645ca9ee5e" text="引用属性模板"
	property="" childs="0" level="1">
	<treeElement id="13f3b5b3cdce7a5798c09c448d391890" text="Hello kity"
		property="" childs="0" level="1_1"></treeElement>
</treeElement>
<treeElement id="13ec5963c069440ec83b74748efad403" text="带有动态属性的分类"
	property="" childs="5" level="2">
	<treeElement id="13f3b3599447f99b522e3434ab4b72b6" text="最后一个子类"
		property="" childs="0" level="2_1"></treeElement>
	<treeElement id="13f3b59a742502a8ba3688a480db0473" text="带有属性的第二个分类"
		property="" childs="0">
		<treeElement id="13f3b5af75ff9c2e1cfafbe436dbaa1f" text="Hello 第三层"
			property="" childs="0" level="2_1_1">
		</treeElement>
	</treeElement>
	<treeElement id="13f3b5b9100f7d9f9ba667e447d8f9b2" text="真是不好测试啊"
		property="" childs="0" level="2_2"></treeElement>
</treeElement>


我是先查出顶层元素,然后用递归,依次找出每个元素的子元素,我现在是不知道怎么控制关闭节点,层级有时候控制的也有点乱,其中还有一个level节点,需要用数字代表层次关系,需要带格式(空格间距)
我把一些没用的删掉了,这是我写的大概的代码,但是没有不能实现我想要的效果
	private void fetchData(String fdCategoryId, String authAreaId,
			String relateLevel, int startLevel) throws Exception {
		List<CategoryModel> categoryList = this
				.getCategoryList(fdCategoryId, authAreaId);
		if (categoryList != null && !categoryList.isEmpty()) {
			for (int i = 0; i < categoryList.size(); i++) {
					private void fetchData(String fdCategoryId, String authAreaId,
			String relateLevel, int startLevel) throws Exception {
		List<CategoryModel> categoryList = this
				.getCategoryList(fdCategoryId, authAreaId);
		if (categoryList != null && !categoryList.isEmpty()) {
			for (int i = 0; i < categoryList.size(); i++) {
				CategoryModel template = categoryList.get(i);
				System.out.println(template.getFdName());
				// 如果是顶层节点
				if (template.getFdParent() == null) {
					relateLevel = String.valueOf(i);
				} else {
					// 如果存在子节点
					if (i - 1 < 0) {
						relateLevel = getRalateLevel(relateLevel, i);
						// 如果是同一级别節點
					} else {
						// 兄弟节点则+1
						relateLevel = calculateRalateIndex(relateLevel, i);
					}
				}
				Integer docAmount = getDocAmount(template, authAreaId);
				XmlBody entity = buildEntity(relateLevel, startLevel, template,
						docAmount);
				buildXmlPart(relateLevel, startLevel, entity, isEnd);
				fetchData(template.getFdId(), authAreaId, relateLevel,
						startLevel);
			}
		} else {
			hasBrotherNode = true;
		}

	private String getRalateLevel(String relateLevel, int index) {
		StringBuilder builder = new StringBuilder(relateLevel);
		builder.append("_");
		builder.append(index);
		return builder.toString();
	}

	/**
	 * 计算父子关系的索引
	 * 
	 * @param ralateLevel
	 * @param index
	 * @return String
	 */
	private String calculateRalateIndex(String ralateLevel, int index) {
		StringBuilder builder = new StringBuilder(ralateLevel);
		int lastIndex = ralateLevel.lastIndexOf("_") + 1;
		builder.replace(lastIndex, ralateLevel.length(), String.valueOf(index));
		return builder.toString();
	}


代码存在问题,尤其是级别回退,比如当到了1_1_1下面没自己点要退回到1_1,然后兄弟节点就是1_2这种,关闭标签也有问题,放在else去关闭,也会存在问题,大家帮帮我,看看该怎么改正一下,才能实现那个功能,也能兼容所任何层次的情况!
XML 
2013年6月13日 20:42
目前还没有答案

相关推荐

    计算求解数独android

    在这个“计算求解数独Android”项目中,我们可以探索如何在Android平台上开发一个能够生成、编辑并解决数独谜题的应用。 首先,我们需要理解Android应用开发的基础,这通常涉及到Java或Kotlin编程语言。在Java中,...

    java数独生成算法及基于此算法的android数独游戏APK

    生成算法可以采用回溯法或者基于递归的深度优先搜索(DFS)策略。在DFS中,算法会尝试填充空格,如果在某个步骤中发现不合法的配置(即重复的数字在同一行、列或九宫格内),则回溯到上一步,尝试下一个可能的数字。...

    计算机知识—数据结构

    在树的遍历中,回溯法可以通过递归的方式实现,当遇到无法继续前进的情况时,会退回到上一步重新选择路径。 ### 树的计数 树的计数是指计算给定条件下所有可能的树的数量。这在分析算法复杂度以及解决组合数学问题...

    算法导论授课教案学习笔记

    3. **图算法**:包括最短路径算法(Dijkstra、Floyd-Warshall)、拓扑排序、最小生成树(Prim、Kruskal)等。 4. **动态规划**:讲述动态规划的基本思想,如背包问题、最长公共子序列、矩阵链乘法等经典问题的解决...

    Maze:Maze Generator是一个JavaFX应用程序,可以生成任何大小的矩形迷宫并解决它们

    Maze Generator是一个JavaFX应用程序,可以生成任何大小的矩形迷宫并进行求解。 迷宫算法 递归回溯器 普里姆算法 威尔逊算法 解决算法 特雷莫 一种* 广度优先搜索 例子 执行 使用Maven构建和运行项目。 打开终端并CD...

    《剑指offer》里的66道编程题,用的是python.zip

    15. **数据解析与序列化**:JSON、XML、CSV等数据格式的解析和生成,以及pickle模块的使用。 通过《剑指Offer》的66道编程题,你将有机会全面深入地学习和实践以上知识,不断提升Python编程技能,为面试和实际工作...

    实用算法及数据结构基础教程

    - **应用场景**:适用于某些特定类型的问题,如最小生成树问题。 ##### 11. 分治算法策略 - **定义**:将一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解。 - **应用场景**:...

    数据结构实验C++版本

    在数据结构中,序列通常由数组或链表表示,而这些序列的生成可能涉及到递归或动态规划等算法。 2. **Test**: 这可能是测试用例或测试框架,用于验证数据结构实现的正确性。在C++中,可以使用诸如Google Test这样的...

    数独HTML5游戏源码

    9. 数独算法:实现一个数独游戏需要理解并编写相应的算法,包括生成合法的数独谜题、检查输入的合法性、求解数独等。这些算法可能基于回溯法、递归或其他高效的策略。 通过学习和分析这个数独HTML5游戏源码,开发者...

    面试及常见问题总结(偏Java)

    Prim算法是求解图的最小生成树的算法,每次从已选节点中找到与未选节点之间最短边,将其添加到最小生成树中。 16. **Cache和Buffer**: Cache是硬件层面的高速缓存,用于存储CPU常用数据以提高访问速度;Buffer是...

    Android数独游戏

    - **数独解决算法**:可以采用回溯法、递归或者更高效的算法来生成和验证数独谜题。 - **错误检查**:检测玩家输入是否符合规则,如行列和宫格内的数字重复。 5. **用户交互**: - **触摸事件处理**:监听用户的...

    CSSimulator-Maze

    这个项目的核心在于利用JavaScript的动态特性来创建和操作复杂的二维数组,代表迷宫的结构,并通过算法来生成、解决以及可视化迷宫。 1. **JavaScript基础**:该项目的基础是JavaScript,一种广泛用于网页和网络...

    android數獨遊戲(開源)opensudoku

    这通常涉及到二维数组来存储数独盘面,以及高效的回溯法或递归深度优先搜索算法来生成和求解题目。 3. **用户界面**:UI设计采用了Android的布局组件,如LinearLayout、RelativeLayout和GridLayout,结合自定义View...

    《Python Cookbook》第三版中文

    2.19 实现一个简单的递归下降分析器:提供了递归下降分析器的基本实现方法。 2.20 字节字符串上的字符串操作:讲解了如何对字节字符串执行常见的字符串操作。 **第三章:数字日期和时间** 3.1 数字的四舍五入:...

    各种情况都好用,什么样的好用,matlab源码.zip

    4. **数值计算**:MATLAB提供了大量内置函数用于数值计算,如数值积分、微分方程求解、最优化问题、线性代数运算等。 5. **图形绘制**:MATLAB可以生成各种类型的图表,包括二维和三维图形、统计图表、信号处理图等...

    GAProject:图算法课程项目的源代码

    6. Kruskal's算法或Prim's算法:最小生成树算法,用于找到连接所有顶点的边权重最小的子集。 这些算法的实现通常涉及到队列、栈、优先队列(堆)等数据结构,以及递归、动态规划和贪心策略等编程技巧。通过这个项目...

    polynom-calc:多项式计算应用

    在C#中,可以使用XML注释为API生成文档。 10. **版本控制**:项目管理通常涉及版本控制工具,如Git,用于追踪代码更改,协作开发,并确保代码的安全。 以上就是基于C#的"polynom-calc"应用所涵盖的一些关键技术点...

    ActionScript开发技术大全

    12.3求解一元二次方程示例 278 12.4小结 279 第13章XML应用基础 280 13.1了解XML 280 13.2处理XML数据 283 13.2.1初始化XML对象 283 13.2.2访问与遍历 285 13.3XML对象 288 13.3.1XML对象的数据处理方式 288 13.3.2...

Global site tag (gtag.js) - Google Analytics