【问题标题】:Generating XML dynamically from the data entered on UI从 UI 上输入的数据动态生成 XML
【发布时间】:2011-03-08 05:33:23
【问题描述】:

我有一个当前手动制作的 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>

【问题讨论】:

  • 您说您无法决定如何存储数据。有什么要求,你考虑过什么?

标签: asp.net xml xml-serialization


【解决方案1】:

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

【讨论】:

  • 像什么?创建骨架 XML 的 DOM,然后当用户更改值时,将这些值存储到 DOM 中的适当节点中。当您希望 XML 成为文件时,请保存它。
  • 对,保罗。我觉得我必须将值存储到数据库中,但我需要确定表结构。
  • 为什么会有这种感觉?除了创建这个 XML 之外,您还在做其他事情吗?如果这个 UI 的唯一目的是创建输入的 XML 表示,那么搞乱数据库和表是没有意义的。
  • 保罗,让我详细了解一下。 Flash 开发人员将 xml 文件用于谷歌地图功能之类的功能。用户需要能够删除和修改数据(即节点和属性)。所以我觉得将它存储在数据库中会很方便。我相信只需获取数据即可执行 dataset.getXML 或 dataset.wrtieXml 之类的操作
  • 所有这些都可以通过 DOM 来实现。除非您希望运行无法在 XPath 中编写的查询,否则表格数据库是毫无意义的东西,会妨碍未来的维护。
【解决方案2】:

如果我是你,我只会将数据存储在数据库中,然后使用 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 序列化,请参阅http://msdn.microsoft.com/en-us/library/ms950721.aspx

【讨论】:

  • 嗨,迈克,感谢您的回复。我想告诉你,我没有在 xml 中进行更多工作,只是盯着看,而且我使用 C# 作为我的语言,但这没关系......现在我想了解更多详细信息,比如你的循环做的是表 SDACTS?表格的列是类型和颜色?您能否详细介绍一下我从 SDACTS 到 Country 标记的前几行 xml 文件以及我需要制作什么样的表结构来存储数据以及构建 xml 文件的代码?我很感激 tat .我看到了 d 链接但是:(
  • 我为 c# 更新了它。我在这里做了很多假设,所以它或多或少是伪代码。我假设 SDACTS list 有一个通用列表。如果我是你,我会为你的 xml 中的每个项目创建一个类。从数据开始。然后,数据将具有诸如 SDACT 之类的属性,这些属性将属于我之前提到的通用列表类型。然后 SDACT 类将具有类型和颜色的属性。等等。这对你正在做的事情来说可能有点过头了,所以如果你有数据,你可以用同样的方式手动写出来,而不用遍历集合。
  • 谢谢迈克。如果你同意的话,我想要你的个人邮件 ID。
  • +1 用于使用 using 块,但 -1 用于使用 new XmlTextWriter()。自 .NET 2.0 以来已被弃用!请改用XmlWriter.Create()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 2013-12-24
  • 2023-02-10
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多