如何用VB把sql2000的数据生成如下的XML的格式----请高手帮忙!!!!!

sdhdy 2010-04-21 05:05:24
  
<?xml version="1.0" encoding="utf-8" ?>
- <root startDate="2010-01-01" endDate="2010-01-01">
- <table name="tablename">
- <record>
<field name="billno" type="string">123456</field>
<field name="chandi" type="string"/><!__这里没有值__>
<field name="indate" type="string">2010-01-01</field>
<!__还有好几个别的字段,这里省略。。。。。。。。__>
</record>
- <record>
<field name="billno" type="string">222222</field>
<field name="chandi" type="string"/>
<field name="indate" type="string">2010-01-01</field>
<!__还有好几个别的字段,这里省略。。。。。。。。__>
</record>
</table>
</root>

说明:根据数据库中tablename查询数据,startDate和endDate是查询框的输入条件,根据indate进行查询,把indate在startDate和endDate之间的记录查询出来,结果生成一个XML文件。
哪位高手解决的好的,另开贴送500分。
...全文
303 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Garnett_KG 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 bancxc 的回复:]
一定要生成这个格式么
rs.save 好像可以直接保存到dom里边
[/Quote]

Recordset可以保存成DOM,然后写一段XSLT转成你想要的格式就好了。
king06 2010-04-22
  • 打赏
  • 举报
回复
DOMDocument和IXMLDOMElement对象
先按字段生成节点,createElement(),然后循环插入数据,最后保存文件.
永生天地 2010-04-21
  • 打赏
  • 举报
回复

use [northwind]
go
select 1 as tag,
null as parent,
'2010-01-01' as [root!1!startDate],
'2010-01-01' as [root!1!endDate],
null as [table!2!name],
null as [record!3],

null as [field!4!name],
null as [field!4!type],
null as [field!4]
union all
select 2,1,'','', 'tablename','' ,'','',''
union
select 3,2,'','', '','' ,'' ,'',''
union
select 4,3,'','','','',ContactName ,City,customerid
from customers
FOR XML EXPLICIT

XML_F52E2B61-18A1-11d1-B105-00805F49916B
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<root startDate="2010-01-01" endDate="2010-01-01"><table name="tablename"><record><field name="Alejandra Camino" type="Madrid">ROMEY</field><field name="Alexander Feuer" type="Leipzig">MORGK</field><field name="Ana Trujillo" type="México D.F.">ANATR</field
me="Henriette Pfalzheim" type="Köln">OTTIK</field><field name="Horst Kloss" type="Cunewalde">QUICK</field><field name="Howard Snyder" type="Eugene">GREAL</field><field name="Isabel de Castro" type="Lisboa">PRINI</field><field name="Jaime Yorres" type="San
ork">HUNGO</field><field name="Patricio Simpson" type="Buenos Aires">CACTU</field><field name="Paul Henriot" type="Reims">VINET</field><field name="Paula Parente" type="Resende">WELLI</field><field name="Paula Wilson" type="Albuquerque">RATTC</field><field

(所影响的行数为 94 行)
shizheyangde 2010-04-21
  • 打赏
  • 举报
回复
字符串连接,c#里面用stringbuilder也是很快的,不知vb中有无类似的类
bancxc 2010-04-21
  • 打赏
  • 举报
回复
可以把这个格式在转化成你的那个格式吧
bancxc 2010-04-21
  • 打赏
  • 举报
回复
    Dim strSql As String
Dom oDom as new DomDocument
strSql = "select * from tb where..."
Set rs = Conn.Execute(strSql)
rs.Save oDom , adPersistXML
rs.Close


格式大概是
<rs:attr/>
<rs:data>
<rs:row />
<rs:row />
<rs:data>
bancxc 2010-04-21
  • 打赏
  • 举报
回复
一定要生成这个格式么
rs.save 好像可以直接保存到dom里边
nalnait 2010-04-21
  • 打赏
  • 举报
回复
http://www.vbcode.com/asp/showzip.asp?ZipFile=http%3A%2F%2Fwww%2Evbcode%2Ecom%2Fcode%2Fxmlgenerator%2Ezip&theID=5504

婶婶看看这个可以下载不 呵呵
nalnait 2010-04-21
  • 打赏
  • 举报
回复
http://www.ehow.com/how_5974702_create-file-database-using-vb.html
nalnait 2010-04-21
  • 打赏
  • 举报
回复
hi,try it.

Part of making dynamic websites is retrieving information from a database. Visual Basic (VB) is a programming language used to retrieve and display dynamic data. One kind of export of database information is writing the data to an extensible markup language (XML) file. These files represent your database tables using HTML tags. You can then use the XML file to display on a web page or import into an external application.
Difficulty: Moderately ChallengingInstructions
Step 1Create a database connection. Before you can retrieve information from the database, you need to create a connection object. The code below creates a connection to an Access database named "myServer":
Dim conn as OleDbConnection
conn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source="myDB.mdb")

Step 2Create a query and retrieve information from the database. This is used to populate the XML file. In this sample, the first and last name is retrieved from the customer table. A datareader is used to store results from your database. The code below queries the database and assigns the results to a datareader object:
conn.Open()
query ="select customerId,first_name,last_name from customer"
command =New OleDbCommand(query,conn)
reader=dbcomm.ExecuteReader()

Step 3Create a new XML file and create the start tag. The start tag is the root of your XML document. Therefore, for this example, since the XML document is a list of customers, the root tag is "customer." The code below illustrates how to start an XML document to write records:
Dim xml As New XmlTextWriter("customer.xml", System.Text.Encoding.UTF8)
xml.WriteStartDocument(True)
xml.Formatting = Formatting.Indented
xml.Indentation = 2
xml.WriteStartElement("customer")

Step 4Fill in the XML file with each customer record. The code below shows you how to loop through the reader and write each record to the XML file:
Do while reader.Read()
xml.WriteStartElement(reader(0))
xml.WriteString(reader(1))
xml.WriteString(reader(2))
Loop

Step 5Close the document by writing the end tag to the XML file. The following code ends the document and closes the XML document, so you can use it in another application:
xml.WriteEndElement()
xml.WriteEndDocument()
xml.Close()
kongbei 2010-04-21
  • 打赏
  • 举报
回复
把字段查出来放在DATATABLE里,然后可以直接导出成XML文档。。。
sdhdy 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fcuandy 的回复:]
用for xml语句生成一个一行一列的结果集,在vb中用ado获取到rs(0), 然后建一个xmldom, xmldom.loadxml(rs(0)), 再save就可以了。
[/Quote]
老顾,我查询里面可有N个字段啊。
fcuandy 2010-04-21
  • 打赏
  • 举报
回复
用for xml语句生成一个一行一列的结果集,在vb中用ado获取到rs(0), 然后建一个xmldom, xmldom.loadxml(rs(0)), 再save就可以了。
cqq_chen 2010-04-21
  • 打赏
  • 举报
回复
从Sql2000的msdn上看到的,也许对你有帮助:

检索和编写 XML 数据
可以执行 SQL 查询返回 XML 格式而不是标准行集的结果。可以直接或从存储过程中执行这些查询。若要直接检索结果,请使用 SELECT 语句的 FOR XML 子句,并在 FOR XML 子句中指定 XML 模式:RAW、AUTO 或 EXPLICIT。

例如,下面的 SELECT 语句从 Northwind 数据库的 Customers 和 Orders 表中检索信息。下面的查询在 FOR XML 子句中指定 AUTO 模式:

SELECT Customers.CustomerID, ContactName, CompanyName,
Orders.CustomerID, OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
AND (Customers.CustomerID = N'ALFKI'
OR Customers.CustomerID = N'XYZAA')
ORDER BY Customers.CustomerID
FOR XML AUTO

尽管可用 FOR XML 子句检索 XML 文档形式的数据,但也可用 Transact-SQL OPENXML 函数插入以 XML 文档形式表示的数据。OPENXML 是类似于表或视图的行集提供程序,用于提供内存中 XML 文档上的行集。OPENXML 通过提供 XML 文档内部表示法的行集视图,允许访问 XML 数据,就好象它是关系行集一样。行集中的记录可以存储在数据库表中。OPENXML 可以在 SELECT 和 SELECT INTO 语句中使用,在这些语句中可以指定源表或视图。

下例说明 OPENXML 在 INSERT 和 SELECT 语句中的用法。示例 XML 文档由 <Customers> 和 <Orders> 元素组成。首先,sp_xml_preparedocument 存储过程分析 XML 文档。分析后的文档是 XML 文档各节点(元素、特性、文本、注释等)的树型表示法。然后 OPENXML 引用这个经过分析的 XML 文档并提供该 XML 文档的全部或部分内容的行集视图。使用 OPENXML 的 INSERT 语句从而可将数据从这样的行集插入数据库表。可用几个 OPENXML 调用提供 XML 文档各部分的行集视图并对它们进行处理,例如,将它们插入不同的表中(该过程也称为"将 XML 拆分到表中")。在下例中,一个 XML 文档被这样拆分:使用两个 INSERT 语句将 <Customers> 元素存储在 Customers 表中并将 <Orders> 元素存储在 Orders 表中。

下例还显示带有 OPENXML 的 SELECT 语句从 XML 文档检索 CustomerID 和 OrderDate。

DECLARE @hDoc int
EXEC sp_xml_preparedocument @hDoc OUTPUT,
N'<ROOT>
<Customers CustomerID="XYZAA" ContactName="Joe"
CompanyName="Company1">
<Orders CustomerID="XYZAA"
OrderDate="2000-08-25T00:00:00"/>
<Orders CustomerID="XYZAA"
OrderDate="2000-10-03T00:00:00"/>
</Customers>
<Customers CustomerID="XYZBB" ContactName="Steve"
CompanyName="Company2">No Orders yet!
</Customers>
</ROOT>'
-- Use OPENXML to provide rowset consisting of customer data.
INSERT Customers
SELECT *
FROM OPENXML(@hDoc, N'/ROOT/Customers')
WITH Customers
-- Use OPENXML to provide rowset consisting of order data.
INSERT Orders
SELECT *
FROM OPENXML(@hDoc, N'//Orders')
WITH Orders
-- Using OPENXML in a SELECT statement.
SELECT * FROM OPENXML(@hDoc, N'/ROOT/Customers/Orders') with (CustomerID nchar(5) '../@CustomerID', OrderDate datetime)
-- Remove the internal representation of the XML document.
EXEC sp_xml_removedocument @hDoc
下例显示出前面由 sp_xml_pareparedocument 创建的 XML 文档经过分析的 XML 树状结构。




请参见

OPENXML

使用 OPENXML 编写 XML

使用 FOR XML 检索 XML 文档

cqq_chen 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sdhdy 的回复:]

引用 5 楼 liangck 的回复:
不知道怎么产生的话,
循环记录集.做个字符串连接总行的.

这个我考虑过,看过一些帖子,说是不建议直接用字符串写文件。
[/Quote]
效果很低,特别是数据量大时
cqq_chen 2010-04-21
  • 打赏
  • 举报
回复
fpspread可以直接把报表中的数据生成xml文件,所以...
sdhdy 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liangck 的回复:]
不知道怎么产生的话,
循环记录集.做个字符串连接总行的.
[/Quote]
这个我考虑过,看过一些帖子,说是不建议直接用字符串写文件。
liangCK 2010-04-21
  • 打赏
  • 举报
回复
不知道怎么产生的话,
循环记录集.做个字符串连接总行的.
sdhdy 2010-04-21
  • 打赏
  • 举报
回复
多谢楼上2位,坐等高手来。。。。。。。。。。。。。。。。。。
ws_hgo 2010-04-21
  • 打赏
  • 举报
回复
如果是asp.net的
我会写
VB不会
友情帮顶...........
加载更多回复(2)

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧