2009-07-21 59 views
0

例如有没有简单的方法使用C#创建从一个XML文件中的新个XML

<?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文件,它的根元素是组件和文件名是根据它们的名称属性,我怎样才能做到这一点?

问候,

回答

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)); 
} 
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 [email protected]" 
    <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,而不需要中间(容易出错且速度较慢)的文件保存。例如,在网络服务器上,您甚至不会有权写入任何内容,因此您可以通过强制使用实际文件来降低可移植性。

相关问题