现有一个XML文件 aa.xml ,格式如下:
<?xml version="1.0" encoding="UTF-8" ?>
- <result>
- <head>
<flag>Login</flag>
<cmd>0</cmd>
</head>
- <body>
- <tasks>
- <task>
<flag>0</flag>
<version>20080409</version>
<name>站</name>
- <menuitems>
<item id="1" pid="0">基本信息</item>
<item id="2" pid="0">机房部分</item>
<item id="3" pid="0">B部分</item>
<item id="4" pid="0">U部分</item>
......................
...........很复杂.......- </task>
- </tasks>
- </body>- </result>
要把<tasks></tasks>之间的字符取出来,生成一个新的XML,<tasks></tasks>之间的结构是未知的,动态变化的,但<tasks></tasks>这个标记是不变的,请问怎么办啊,谢谢
<?xml version="1.0" encoding="UTF-8" ?>
- <result>
- <head>
<flag>Login</flag>
<cmd>0</cmd>
</head>
- <body>
- <tasks>
- <task>
<flag>0</flag>
<version>20080409</version>
<name>站</name>
- <menuitems>
<item id="1" pid="0">基本信息</item>
<item id="2" pid="0">机房部分</item>
<item id="3" pid="0">B部分</item>
<item id="4" pid="0">U部分</item>
......................
...........很复杂.......- </task>
- </tasks>
- </body>- </result>
要把<tasks></tasks>之间的字符取出来,生成一个新的XML,<tasks></tasks>之间的结构是未知的,动态变化的,但<tasks></tasks>这个标记是不变的,请问怎么办啊,谢谢
doc.SelectNodes用xmlpath就可以实现
doc.Load("aa.xml")
Dim elemList As XmlNodeList = doc.GetElementsByTagName("task")Dim i As Integer
For i = 0 To elemList.Count - 1
Console.WriteLine(elemList(i).InnerXml)
Next i
xmlOld.Load(@"C:\XMLFile1.xml");
XmlDocument xmlNew = new XmlDocument();
xmlNew.LoadXml(xmlOld["result"]["body"]["tasks"].InnerXml); MessageBox.Show(xmlNew.InnerXml);
1.加载XmlDocument,并导航到Tasks节点
2.定位到XmlDocument对象的根节点,把1中得到节点对象添加进来。
3.删除Doc根节点中除2新添加的节点以外的所有子节点。
4.保存XmlDocument对象到一个文件中。
XmlNode node=XmlDoc.SelectSingleNode("//tasks");
2.把节点及其子节点保存到XMLWRITER中,在生成新的XML时,把此WRITER放入合适的位置即可。
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting = Formatting.Indented;
node.WriteContentTo(writer);
#region XMLDocument方法
/// <summary>
/// 给定一个节点的xPath表达式并返回一个节点
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public XmlNode FindNode(string xPath)
{
XmlNode xmlNode = this.SelectSingleNode(xPath);
return xmlNode;
}
/// <summary>
/// 给定一个节点的xPath表达式返回其值
/// </summary>
/// <param name="xPath"></param>
/// <returns></returns>
public string GetNodeValue(string xPath)
{
XmlNode xmlNode = this.SelectSingleNode(xPath);
return xmlNode.InnerText;
} public void SetNodeValue(string xPath, string NewValue)
{
XmlNode xmlNode = this.SelectSingleNode(xPath);
xmlNode.InnerText = NewValue;
this.Save(tXMLPath);
} public void SetNodeListValue(string xPath, ArrayList al)
{
XmlNode xmlNode = this.SelectSingleNode(xPath);
xmlNode.RemoveAll();
this.Save(tXMLPath);
foreach (string fileName in al)
{
XmlElement xesub1 = this.CreateElement("Name");
xesub1.InnerText = fileName;
xmlNode.AppendChild(xesub1);
}
this.Save(tXMLPath);
}
#endregion
doc.Load("c:\\test.xml");
XmlNodeList nodelist = doc.SelectNodes("result/tasks/task");
int i=0;
foreach (XmlNode node in nodelist)
{
XmlDocument tmpdoc = new XmlDocument();
tmpdoc.LoadXml(node.OuterXml);
XmlDeclaration dec = tmpdoc.CreateXmlDeclaration("1.0", "utf-8", null);
tmpdoc.InsertBefore(dec, tmpdoc.FirstChild);
tmpdoc.Save("c:\\a" + i++ + ".xml");
}