2013-04-10 36 views
0

我试图在C#中根据客户端的请求来格式化XML页面。下面是我目前在XML创建在.NET中编写XML

<?xml version="1.0" encoding="utf-8"?> 
<!--This is to write the connection strings, text file location, and report destination.--> 
<AdminPaths Name="sqlConnection1" connectionString="asdf"> 
    <TextPath> 
    <Key Value="Test3" xmlns="Path" /> 
    </TextPath> 
</AdminPaths> 

这是我想拥有的一切:

<?xml version="1.0" encoding="utf-8"?> 
<!--This is to write the connection string, text file location, and report destination.--> 
<AdminPaths> 
    <Name="sqlConnection1" connectionString="asdf"> 
</AdminPaths> 
<TextPath> 
    < Key="Path" Value="Test3"> 
    < Key="Report" Value="Test2"> 
</TextPath> 

这是我目前使用的代码:

 XmlWriterSettings settings = new XmlWriterSettings(); 
     settings.Indent = true; 

     XmlWriter writer = XmlWriter.Create("C:\\Users\\fthompson11\\WebFile.xml", settings); 
     writer.WriteStartDocument(); 
     writer.WriteComment("This is to write the connection strings, text file location, and report destination."); 
     writer.WriteStartElement("AdminPaths"); 
     writer.WriteAttributeString("Name", "sqlConnection1"); 
     writer.WriteAttributeString("connectionString", "asdf"); 
     writer.WriteStartElement("TextPath"); 
     writer.WriteStartElement("Key", "Path"); 
     writer.WriteAttributeString("Value", "Test3"); 
     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 

     writer.Flush(); 
     writer.Close(); 

我曾尝试使用writer.WriteEndElement();在writeAttributeString启动之后,但我收到一个错误,指出“如果要编写XML片段,请确保ConformanceLevel设置设置为ConformanceLevel.Fragment或ConformanceLevel.Auto。”我相信这不是我想要做的?任何帮助,将不胜感激。

谢谢。

+5

“我想吃点什么”的模样无效的XML ... – millimoose 2013-04-10 22:28:41

+0

什么是不正确的呢? – 2013-04-10 22:29:17

+0

@BigPoppa xml应该有单根元素 – 2013-04-10 22:30:22

回答

2

认为这是你想要的XML。我猜测,因为你说的XML是你的目标没有正确形成。

<?xml version="1.0" encoding="utf-8"?> 
<!--This is to write the connection strings, text file location, and report destination.--> 
<AdminPaths> 
    <AdminPath Name="sqlConnection1" connectionString="asdf" /> 
    <TextPath> 
    <Text Key="Path" Value="Test3" /> 
    <Text Key="Report" Value="Test2" /> 
    </TextPath> 
</AdminPaths> 

基本上,你的既定目标XML,你试图创建XML文档下2层的节点,这是一个没有没有,除非你愿意用ConformanceLevel.FragmentConformanceLevel.Auto,迫使这种行为。

该代码,希望以下内容:

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Indent = true; 

XmlWriter writer = XmlWriter.Create("C:\\Users\\fthompson11\\WebFile.xml", 
    settings); 
writer.WriteStartDocument(); 
writer.WriteComment("This is to write the connection strings, text file location, and report destination."); 

// the AdminPaths 
writer.WriteStartElement("AdminPaths"); 
writer.WriteStartElement("AdminPath"); 
writer.WriteAttributeString("Name", "sqlConnection1"); 
writer.WriteAttributeString("connectionString", "asdf"); 
writer.WriteEndElement(); 

// the TextPath's 
writer.WriteStartElement("TextPath"); 
writer.WriteStartElement("Text"); 
writer.WriteAttributeString("Key", "Path"); 
writer.WriteAttributeString("Value", "Test3"); 
writer.WriteEndElement(); 

writer.WriteStartElement("Text"); 
writer.WriteAttributeString("Key", "Report"); 
writer.WriteAttributeString("Value", "Test2"); 
writer.WriteEndElement(); 

writer.WriteEndElement(); // </AdminPaths> 
writer.WriteEndDocument(); 
writer.Flush(); 
writer.Close(); 
+0

再次感谢。这有助于一吨。 – 2013-04-10 22:52:37

1

这是喜欢的原因无效的XML:

  • 多个根元素,那就是周围的所有的东西,一个<>元素。在第一个示例中,<AdminPaths>是单根元素,因为其中包含其他所有内容。
  • 没有名称的节点。例如,<add=""无效 - 如果节点的名称是add,则它不能直接具有值。方法是<add>Value</add>。否则,您必须具有以下属性:<add key="">
  • 类似地,< Key="Path" Value="Test3">是无效的,因为它没有名称,只有两个属性(键和值),也没有关闭(节点需要有结束标记,如<add></add>或自闭样<add />(注意>前/)

阅读上一个节点或元素和XML的属性,它应该成为比较明确的,你需要建立什么,然后之间的差异,我们可以解决的方法如下:

+0

我认为这应该是一个评论,而不是一个解决方案 – 2013-04-10 22:36:38

+0

@lazyberezovsky这是太长的评论:/ – 2013-04-10 22:37:03

+1

同意,但从技术上说,这仍然是一个评论:) – 2013-04-10 22:38:06