有没有简单的方法可以使用c#从xml文件创建新的xmls

时间:2009-07-21 08:12:46

标签: c# xml xslt

例如

<?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属性,我该如何实现?

此致

2 个答案:

答案 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));
}