给没有节点的文字添加节点
最近在处理xml时,发现有很多xml的 节点内有些文字需要节点,正常取值取不出来,特地写个方法解决问题
首先,看一下我遇到了什么问题
<父节点> <子节点>111</子节点> <子节点>222</子节点> <子节点>333</子节点> <子节点>444</子节点> 555 </父节点>
这样的话 elements()这个方法就只能取到 4个子节点
下面这个方法就是用来解决这个问题
/// <summary> /// 给没有节点的添加节点 /// </summary> /// <param name="xElement">要处理的节点或xml</param> /// <param name="XName">要添加的节点名称</param> /// <returns></returns> public static XElement CreateNewEle(XElement xElement, string XName) { string xmlTxt = xElement.ToString().Replace("/>", "/>\n").Replace("<", "\n<"); string line = string.Empty; StringReader reader = new StringReader(xmlTxt); StringBuilder xmlbuilber = new StringBuilder(); while ((line = reader.ReadLine()) != null) { if (!string.IsNullOrEmpty(line.Trim()) && !line.Contains("<") && !line.Contains("/>")) { line = "<临时节点>" + line + "</临时节点>"; } if (!string.IsNullOrEmpty(line)) { xmlbuilber.Append(line); } } xElement = XElement.Parse(xmlbuilber.ToString()); return xElement; }
调用方法 :
ele :要处理的节点或xml
“临时节点”:要添加的节点名称
XElement newEle = CreateNewEle(ele,"临时节点");
处理后结果:
<父节点> <子节点>111</子节点> <子节点>222</子节点> <子节点>333</子节点> <子节点>444</子节点> <临时节点>555</临时节点> </父节点>
------------------------------------------------------------------------------------------------------------------------这个是分割线------------------------------------------------------------------------------------------------------------------------
在实际使用中,上面的方法感觉还是有一些问题的。
问题如下:
string xmlTxt = xElement.ToString().Replace("/>", "/>\n").Replace("<", "\n<");
请看这句代码
/> 替换为 />\n
< 替换为 <\n
\n 为换行
> 没有替换也不能替换
>不替换可能出现的场景:
<父节点> <子节点>111</子节点> <子节点>222</子节点> <子节点>333</子节点> <子节点>444</子节点> 555 </父节点>
>替换出现的场景:
<父节点> <子节点>
111
</子节点> <子节点>
222
</子节点> <子节点>
333</子节点> <子节点>444</子节点> 555 </父节点>
------------------------------------------------------------