xml去除指定节点,保留子节点操作
现有xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<ShiftConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Ot>
<BeforeOtRange>
<Start>
<DateTime xsi:nil="true" />
</Start>
<End>
<DateTime xsi:nil="true" />
</End>
<StartPoint></StartPoint>
</BeforeOtRange>
<HolidayWorkingType>
<Start>
<DateTime xsi:nil="true" />
</Start>
<End>
<DateTime xsi:nil="true" />
</End>
<StartPoint></StartPoint>
</HolidayWorkingType>
<AfterOtRange>
<Start>
<DateTime xsi:nil="true" />
</Start>
<End>
<DateTime xsi:nil="true" />
</End>
<StartPoint></StartPoint>
</AfterOtRange>
<OvernightIn xsi:nil="true" />
<OvernightOut xsi:nil="true" />
<OvernightDayCount></OvernightDayCount>
<TimeScale></TimeScale>
<TimeScaleType></TimeScaleType>
<IsAutoSwitchToOt>false</IsAutoSwitchToOt>
<SwitchType>-</SwitchType>
<IsSwitchTypeAfter>false</IsSwitchTypeAfter>
<IsSwitchTypeMiddle>false</IsSwitchTypeMiddle>
<IsSwitchTypeBefore>false</IsSwitchTypeBefore>
<EffectiveMonth></EffectiveMonth>
<IsSwitchToHoliday>false</IsSwitchToHoliday>
<Boundary xsi:nil="true" />
</Ot>
<Item>
<IsHolidayWorkingType>false</IsHolidayWorkingType>
<ClockInInterval xsi:nil="true" />
<WorkingHoursType></WorkingHoursType>
<WorkingHours>--01T00::</WorkingHours>
<EffectiveWorkingHours>--01T00::</EffectiveWorkingHours>
<WorkingDays></WorkingDays>
<IsNoAbsence>false</IsNoAbsence>
<LatePoint></LatePoint>
<LateBoundary xsi:nil="true" />
<LeaveEarlyPoint></LeaveEarlyPoint>
<LeaveEarlyBoundary xsi:nil="true" />
<WorkingHoursTimeScale></WorkingHoursTimeScale>
<MealMinuteCount></MealMinuteCount>
<SecondDayWorkingLazy xsi:nil="true" />
<MorningHalfDayStartDate>--01T00::</MorningHalfDayStartDate>
<MorningHalfDayEndDate>--01T00::</MorningHalfDayEndDate>
<AfterHalfDayStartDate>--01T00::</AfterHalfDayStartDate>
<AfterHalfDayEndDate>--01T00::</AfterHalfDayEndDate>
<LateAsAbsenteeismDate xsi:nil="true" />
<LeaveEarlyAsAbsenteeismDate xsi:nil="true" />
<IsLackSwingCard>false</IsLackSwingCard>
<DaysOfLackSwingCardAsabsenteeism></DaysOfLackSwingCardAsabsenteeism>
<Priority></Priority>
<IsToLateOrEarlyFromHalfDayOfAbsence>false</IsToLateOrEarlyFromHalfDayOfAbsence>
<YesterdayStart>--01T00::+:</YesterdayStart>
</Item>
</ShiftConfig>
我要去除Ot与Item节点:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Web;
namespace ConsoleApplicationXml
{
class Program
{
static void Main(string[] args)
{
//string xmlFilePath = @"X:\about.net\example\XmlExample\1.xml";
//string xmlFilePath = HttpContext.Current.Server.MapPath("ShiftConfig.xml");
//StringBuilder sb = new StringBuilder();
if (File.Exists("ShiftConfig.xml") == true)
{
string xmlValue = "";
string xmlString = File.ReadAllText("ShiftConfig.xml");
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
XmlNode root = xmlDoc.DocumentElement; //取到根结点
XmlNode otNode = xmlDoc.SelectSingleNode("ShiftConfig/Ot");
XmlNode itemNode = xmlDoc.SelectSingleNode("ShiftConfig/Item");
if (otNode != null)
{
XmlNodeList otNodeList = otNode.ChildNodes;
if (otNodeList != null)
{
foreach (XmlNode xn in otNodeList)
{
XmlNode deep = xn.CloneNode(true); //克隆根节点
XmlNode xx = xmlDoc.ImportNode(deep, true);
root.AppendChild(xx);
}
root.RemoveChild(otNode);
}
}
if (itemNode != null)
{
XmlNodeList itemNodeList = itemNode.ChildNodes;
if (itemNodeList != null)
{
foreach (XmlNode xn in itemNodeList)
{
XmlNode deep = xn.CloneNode(true); //克隆根节点
XmlNode xx = xmlDoc.ImportNode(deep, true);
root.AppendChild(xx);
}
root.RemoveChild(itemNode);
}
} if (otNode != null || itemNode != null)
{
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, null);
writer.Formatting = Formatting.Indented;
xmlDoc.Save(writer);
StreamReader streamReader = new StreamReader(stream, System.Text.Encoding.UTF8);
stream.Position = ;
xmlValue = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
} Console.WriteLine(xmlValue); //if (otNodeList != null)
//{
// foreach (XmlNode xn in otNodeList)
// {
// XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
// //if (xe.Name == "BeforeOtRange")//如果找到
// //{
// //
// //}
// sb.Append("" + xe.OuterXml + "");
// }
//}
//if (itemNodeList != null)
//{
// //TODO:把item下面的节点foreach
// foreach (XmlNode xn in itemNodeList)
// {
// XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
// sb.Append("" + xe.OuterXml + "");
// }
//}
//root.InnerXml = sb.ToString(); xmlDoc.Save("D:\\xmloperate\\ConsoleApplicationXml\\ShiftConfig.xml");
//Console.WriteLine(sb.ToString());
//Console.WriteLine(root); Console.Write("\r\nPress any key to continue....");
Console.Read();
} }
}
}
xml去除指定节点,保留子节点操作的更多相关文章
- 获取元素节点的子节点 & 获取文本节点
1. 获取元素节点的子节点(**只有元素节点才有子节点): ①. childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 ...
- JavaScript的DOM编程--04--获取元素节点的子节点
获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...
- C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?
根节点的Level属性为0,一级子节点Level属性为1,二级子节点Level属性为2,以此类推:同级节点可以用索引.名称.文本来区分.用索引区分根节点时,TreeView.Nodes[0]就是第一个 ...
- zTree实现清空选中的第一个节点的子节点
zTree实现清空选中的第一个节点的子节点 1.实现源代码 <!DOCTYPE html> <html> <head> <title>zTree实现基本 ...
- Web网页树形列表中实现选中父节点则子节点全选和不选中父则子全不选
需要实现的功能:选中父节点对应子节点全选:不选中父节点,对应子节点也不选中 如下图所示,选中车队,对应车队中车辆也全部选中,以实现车队中所有车辆在地图上的显示. 选中cqupt ...
- jQuery获取节点和子节点文本的方法
本节主要介绍了jQuery如何获取节点和子节点文本,下面有个示例,大家可以参考下 对于下面的html片段, ? 1 <div id="text_test">test t ...
- SqlServer父节点与子节点查询及递归
在最近老是用到这个SQL,所以记下来了: 1:创建表 CREATE TABLE [dbo].[BD_Booklet]( [ObjID] [int] IDENTITY(1,1) NOT NULL, [P ...
- 包含mysql 递归查询父节点 和子节点
包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...
- 总结获取原生JS(javascript)的父节点、子节点、兄弟节点
关于原生JS获取节点,一直是个头疼的问题,而且调用方法的名字又贼长了,所以我选择用JQ,好像跑题了-- 话不多说看代码 获取父节点 及 父节点下所有子节点(兄弟节点) <ul> <l ...
- Jquery选择器之父节点的子节点
今天review代码,发现有哥们这么写 var span = $($("span"),$("#main")); 我百思不得其解,$(a,b)又好像在哪里见过,后 ...
随机推荐
- Ext的表格控件如何绑定
1. XML数据源 假设我们有一个数据源是以XML的形式存在的,我们需要从里面取出数据并绑定在界面.XML的结构如下: </age> <name>石曼迪</name&g ...
- SASS输出风格
嵌套输出方式 nested sass --watch test.scss:test.css --style nested 嵌套输出方式 expanded sass --watch test.scss: ...
- golang日期时间格式format()
format()函数格式化字符串,用了语句time.now().format(“2015-11-12 12:00:00”),结果输出结果就是不能达到理想的结果,然后把golang文档中的”2006-0 ...
- Android学习进阶和IoC
1.成为Android高手一般分为六个阶段: 第一阶段:熟练掌握Java SE,尤其是对其内部类.线程.并发.网络编程等需要深入研究:熟练掌握基于HTTP协议的编程,清楚POST和GET等请求方式流程 ...
- 错误 1 error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use . See online help for details.
出现这种警告的原因是因为我们没有使用安全的字符串处理函数.如果想屏蔽这种警告,可以使用: 还可以使用其它的方法,参考: https://www.cnblogs.com/gb2013/archive/2 ...
- [Linux] ubuntu下查看CHM的软件
本文旨在介绍linux下的常见chm阅读软件及其安装,并针对一些问题给出解决方法. 一.CHMSEE 这个比较常见了,呵呵. 安装: sudo apt-get install chmsee 之后在应用 ...
- 实现SQL Server中的切割字符串SplitString函数
有时我们要用到批量操作时都会对字符串进行拆分,可是SQL Server中却没有自带Split函数,所以要自己来实现了.没什么好说的,需要的朋友直接拿去用吧 SET ANSI_NULLS ON GO S ...
- 在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?
在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么? 例如: //! [0] GLWidget :: GLWidget(Helper * helper,QWidget * pare ...
- 这篇讲PHP的讲的有些道理 & mb_substr & 中文处理
http://chengxu.org/p/239.html Python 是否是下一个 PHP? 1. PHP胜在最要命的部署上:没有任何其他语言有像 PHP 一样适合大规模部署的方式.基本上装好 A ...
- c# 注册表操作,创建,删除,修改,判断节点是否存在
用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除.键值的创建(设置值.修改),读取和 删除.判断注册表项是否存在.判断键值是否存在. 准备工作: 1:要操作注册表,我们必须 ...