【问题标题】:How to generate multiple xml files based on rowcount如何根据rowcount生成多个xml文件
【发布时间】:2014-02-12 07:15:38
【问题描述】:

我能够成功地为一百万条记录生成一个大型 xml 文件 使用下面的代码。

cmd.CommandText = "SELECT PARTNER_NO FROM T1 WHERE YEAR LIKE '%2011-2012%'";  
XmlWriter myWriter = XmlWriter.Create("C:/Test/BookInfo.xml")  
myWriter.WriteStartDocument(true); 
using(OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))  
  {  
    reader.FetchSize = reader.RowSize * 5000;  
    myWriter.WriteStartElement("master_table");
    while(reader.Read())
      {  
         myWriter.WriteStartElement("partner");  
         myWriter.WriteElementString("partner_no", reader[0].ToString());  
         myWriter.WriteElementString("id","0008");  
         myWriter.WriteEndElement();  
      }  
 }  

 myWriter.WriteEndDocument();  
 myWriter.Flush();  
 myWriter.Close();  
 cmd.Dispose()  

这就是我的 xml 的样子:

我现在有一个新要求,即根据行数生成多个 10,000 条记录的 xml 文件。 对此有任何指示吗?我应该怎么做?这需要在c#上完成

【问题讨论】:

    标签: c# xml oracle odp.net


    【解决方案1】:

    您可以在单个 SQL 调用中完成:

    SQL> SELECT XMLSERIALIZE(CONTENT xmlelement("MASTER_TABLE",
      2                                  xmlagg(xmlelement("PARTNER",
      3                                                    XMLELEMENT("PARTNER_NO",
      4                                                               partner_no),
      5                                                    XMLELEMENT("ID", '0008')
      6                                                    )
      7                                        ))
      8                       INDENT) xmltxt
      9    FROM t1
     10   GROUP BY CEIL(ROWNUM/2)-- replace 2 by 10000
     11  ;
    
    XMLTXT
    -------------------------------------------------------------------------------
    <MASTER_TABLE>
      <PARTNER>
        <PARTNER_NO>00001</PARTNER_NO>
        <ID>0008</ID>
      </PARTNER>
      <PARTNER>
        <PARTNER_NO>00034</PARTNER_NO>
        <ID>0008</ID>
      </PARTNER>
    </MASTER_TABLE>
    <MASTER_TABLE>
      <PARTNER>
        <PARTNER_NO>00046</PARTNER_NO>
        <ID>0008</ID>
      </PARTNER>
      <PARTNER>
        <PARTNER_NO>00052</PARTNER_NO>
        <ID>0008</ID>
      </PARTNER>
    </MASTER_TABLE>
    

    进一步阅读:

    【讨论】:

    • 谢谢文森特。但这是我第一次处理 XML 并且需要一些 c# 代码来生成多个 xml 文件单击按钮。
    • 我不熟悉 C#,但您可能会在循环中每 10k 行关闭一次文件,然后在原始代码中打开另一个文件。
    • 如果要在存储过程中写入 out 参数应该是什么,因为我得到 `ERROR line 11, col 24, ending_line 11,ending_col 29, Found 'INDENT', Expecting:) ` 以及 VERSION ='1.0', encoding="UTF-8" , STANDALONE= YES 应该如何显示在 xml 文件中
    • 这不是我正在寻找的正确解决方案,但即使这对我有用.. 谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多