Asp.net 从UI上输入的数据动态生成XML

Asp.net 从UI上输入的数据动态生成XML,asp.net,xml,xml-serialization,Asp.net,Xml,Xml Serialization,我有一个xml文件,目前是手动创建的,我必须创建一个功能UI,用户可以在其中输入数据,我必须在.NET中存储数据并动态生成xml文件 问题是xml文件的格式。我无法决定如何存储这些数据,然后从中动态生成xml 请在下面的xml文件中找到部分代码摘录: <?xml version="1.0" encoding="UTF-8"?> <DATA> <SDACTS> <SDACT TYPE="Economy" COLOUR="0xff0000"/&g

我有一个xml文件,目前是手动创建的,我必须创建一个功能UI,用户可以在其中输入数据,我必须在.NET中存储数据并动态生成xml文件

问题是xml文件的格式。我无法决定如何存储这些数据,然后从中动态生成xml

请在下面的xml文件中找到部分代码摘录:

<?xml version="1.0" encoding="UTF-8"?>
<DATA>
  <SDACTS>
    <SDACT TYPE="Economy" COLOUR="0xff0000"/>
    <SDACT TYPE="Environment" COLOUR="0x00ff00"/>
    <SDACT TYPE="People" COLOUR="0x0000ff"/>
    <SDACT TYPE="Society" COLOUR="0xff00ff"/>
  </SDACTS>
  <INDUSTRIES>
    <INDUSTRY TYPE="Platinum" COLOUR="0x0094B1">
      <PRODUCT>Platinum</PRODUCT>
      <PRODUCT>Palladium</PRODUCT>
      <PRODUCT>Rhodium</PRODUCT>
      <PRODUCT>Gold</PRODUCT>
    </INDUSTRY>
    <INDUSTRY TYPE="Diamonds" COLOUR="0x652382">
      <PRODUCT>Diamonds</PRODUCT>
    </INDUSTRY>
 <INDUSTRY TYPE="Metallurgical Coal" COLOUR="0x999a8f">
      <PRODUCT>Metallurgical Coal</PRODUCT>
    </INDUSTRY>
</INDUSTRIES>
  <LOCATIONS>
    <CONTINENT TITLE="South America">
      <COUNTRY TITLE="Brazil">
        <HEADOFFICE>So Paulo</HEADOFFICE>
        <ADDRESS>
         Sau, polo, ambikaui 
        </ADDRESS>
        <LATITUDE>-23.571157</LATITUDE>
        <LONGITUDE>-46.644146</LONGITUDE>
        <BUSINESSUNITS>Nickel; Iron ore and manganese</BUSINESSUNITS>
        <DESCRIPTION>Anglo American has been operating in Brazil since 1973. Our core operations are involved in the production of nickel, iron ore and maganese, while our interests in the production of phosphates and niobium at Copebras and Catalo respectively have been identified for divestment. Nickel projects in the pipeline include Barro Alto.</DESCRIPTION>
        <EMPLOYEES/>
        <NUMBEROFBUSINESS>2</NUMBEROFBUSINESS>
        <!--New project added - 12/02/2010  start -->
        <PROJECT>
          <TYPE>Greenfield</TYPE>

          <NAME>Minas Rio expansion</NAME>
          <UNITTYPE>Iron Ore and Manganese</UNITTYPE>
          <RELATEDOPERATION>Greenfield</RELATEDOPERATION>
          <LATITUDE>-18.92814</LATITUDE>
          <LONGITUDE>-43.42562</LONGITUDE>
          <STATUS>Future unapproved</STATUS>

          <DESCRIPTION/>
          <FULLPRODUCTIONDATE>TBD</FULLPRODUCTIONDATE>
          <PRODUCTIONVOLUME>Up to 53 Mtpa iron ore pellet feed (wet basis)</PRODUCTIONVOLUME>
          <!-- <ESTIMATEDCAPEX>TBD</ESTIMATEDCAPEX>-->
          <FOOTNOTES>
            <![CDATA[1. Capital expenditure shown on 100% basis in nominal terms. Platinum projects reflect approved capex.<br><br>2. Production volume represents 100% of average incremental or replacement production, at full production, unless otherwise stated.]]>
          </FOOTNOTES>
        </PROJECT>
        <SDACTIVITY>
          <ID>3.2.4.20</ID>

          <TYPE>Society</TYPE>
          <BUSINESS>Nickel</BUSINESS>
          <RELATEDOPERATION/>
          <HEADING>Listening - and acting - in Brazil</HEADING>
          <SUBHEADING>SEAT community engagement session in Brazil</SUBHEADING>
          <COPY>
            local government.
          </COPY>
          <IMAGE>3.2.4.20.jpg</IMAGE>
          <LINKCAPTION>Read more about SEAT in Brazil</LINKCAPTION>
          <LINKURL>http://www.angloamerican.co.uk/aa/development/case-studies/society/society01/</LINKURL>
        </SDACTIVITY>
 </COUNTRY>
   </CONTINENT>
  </LOCATIONS>
</DATA>

您可以直接将数据存储在DOM中,并在需要时进行序列化。

如果我是您,我只需将数据存储在db中,然后使用xmltexwriter将其写入任何位置

using (XmlTextWriter writer = new XmlTextWriter(OutputStream, Encoding.UTF8)) {
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("DATA");
writer.WriteStartElement("SDACTS");
foreach ( SDACT in SDACTs) {
    writer.WriteStartElement("SDACT");
    writer.WriteAttributeString("TYPE", SDACT.Type);
    writer.WriteAttributeString("COLOUR", SDACT.COLOUR);
    writer.WriteEndElement();
}
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
}


您还可以利用.nets XML序列化,请参见

嗨,Mike,谢谢您的回复。我想告诉你们,我并没有在xml方面做更多的工作,只是开始了,而且我使用C作为我的语言,但这没关系。。。现在我想了解更多的细节信息,比如您正在执行的循环是表SDACTS?表中的列是类型和颜色?你能不能给我一个关于我的前几行xml文件的详细信息,从SDACTS到Country标记,我需要做什么样的表结构来存储数据,然后是构建xml文件的代码?我非常感谢。我看到了d链接,但是:我更新了c。我在这里做了很多假设,所以它或多或少是psudocode。我假设SDACTS列表有一个通用列表。如果我是你,我会为xml中的每个项目创建一个类。从数据开始。然后,数据将具有诸如SDACTs之类的属性,这将是我前面提到的泛型列表类型。然后,SDACT类将具有Type和color属性。等等这对于你正在做的事情来说可能是过分的,所以如果你有数据,你可以用同样的方式手动写出它,而不必删掉集合。谢谢迈克。如果您同意的话,我想知道您的个人邮件id。+1用于使用using块,而-1用于使用新的XmlTextWriter。自从.NET2.0以来,它就被弃用了!改用XmlWriter.Create。您说您无法决定如何存储数据。要求是什么,你考虑过什么?比如什么?创建骨架XML的DOM,然后当用户更改值时,将这些值存储到DOM中相应的节点中。当您希望XML成为文件时,请保存它。我觉得我必须将值存储到数据库中,但我需要确定表的结构。你为什么有这种感觉?除了创建此XML之外,您还在做其他事情吗?如果这个UI的唯一目的是创建输入的XML表示,那么混同数据库和表是毫无意义的。flashdeveloper使用xml文件来实现类似googlemap的功能。用户需要具备删除和修改数据的功能,即。节点和属性。所以我觉得将其存储在数据库中非常方便。我相信只要获取数据,就可以执行类似dataset.getXML或dataset.wrtieXml的操作,所有这些都可以通过DOM实现。除非您希望运行不能用XPath编写的查询,否则表格数据库是毫无意义的,会妨碍将来的维护。