例如
<?xml version="1.0" encoding="UTF-8"?>
<!--just example, the actual element structure is rather complex -->
<components>
<component name='a'/>
<component name='b'/>
<component name='c'/>
</components>
现在我要创建三个单独的xml文件,其根元素是组件,文件名是根据它们的name属性,我该如何实现?
此致
答案 0 :(得分:1)
使用LINQ to XML,类似于
XElement rootElem = ... //load this however you happen to
foreach (var component in rootElem.Elements("component"))
component.Save(your-XmlWriter-here); //you'll want a distinct writer per file
应该可以正常工作;为您的具体例子......
string xml =@"
<components>
<component name='a'/>
<component name='b'/>
<component name='c'/>
</components>
";
foreach (XElement component in XElement.Parse(xml).Elements() )
component.Save(component.Attribute("name").Value + ".xml");
完全按照指定的方式工作。但是,我发现尽可能避免处理特定文件名是一种好习惯,因为通常可以在以后直接处理XML,而不需要中间(容易出错和缓慢)的文件保存。例如,在Web服务器上,您甚至没有权限编写任何内容,因此您通过强制使用实际文件来降低可移植性。
答案 1 :(得分:0)
你走了:
System.Xml.XmlDocument daddyDoc = new System.Xml.XmlDocument();
daddyDoc.LoadXml("<?xml version='1.0' encoding='UTF-8'?><components><component name='a'/><component name='b'/><component name='c'/></components>");
foreach (System.Xml.XmlNode sprogNode in daddyDoc.GetElementsByTagName("component"))
{
System.Xml.XmlDocument sprogDoc = new System.Xml.XmlDocument();
sprogDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
sprogDoc.AppendChild(sprogDoc.CreateElement("component"));
sprogDoc.Save(string.Format("C:\\{0}.xml", sprogNode.Attributes["name"].Value));
}