咨询,怎样大量苹果存放数据也能存放在XML文档里吗

用XML文件存储数据
用XML文件存储数据
1:XML缺少数据库具备的特性:高效的存储(即使是数据库内XML字段还是没有传统字段的速度快)、索引和数据修改机制(DB2等数据库产品对XML内的元素和属性可以加索引,内建在数据库中的XML字段享受了数据库带来的一些好处);严格的数据安全访问控制;完整的事务和数据一致性控制;多用户访问机制;触发器、完善的并发控制等因此,用户量大、数据集成度高以及性能要求高的数据环境中还是需要数据库来完成任务,IBM的DB2工程师也在讨论时建议我们统计类数据还是用传统字段为好。
2:说说 XSL,XSLT文件是用来做XML转换,一般是转换为HTML(XHTML),只是转换的话 XSL 代码与XML的结构复杂度有关,与 XML本身有多少数据量无关, 为什么会有几千万行的数据?你恐怕把 XML 写成 XSL 了吧,数据有几千万行才对吧,XSL 不会很大。3:真的数据源有 几千万行的话,是否应该存在 XML 文档中?你可以计算一下,XML文档是文本模式存放,一行存放最少算平均20个字节有吧(就算10个汉字),那 1000万行已经 200M 大,不要说 200M,就是20M的文本文件用编辑器打开都会非常吃力,像死机一样,这么大的数据量我认为不应该存在 XML 文件中,应存在数据库表中,如果是文件系统应该用二进制文件存放或根据用途和管理方案对其分割。XML只适合保存少量数据,最多不能超过1w
4:数据库中XML数据(表转换或通过源生XML字段)读出通过 XSL 显示页面的方式由于没有了SQL,可以保证页面代码与各类数据库产品的无关性,由于大数据量显示一般都有分页控制读取和显示,性能问题不大。
5,现代的数据库大部分都有 XML 字段,可以直接存储 XML, 不需要经过 表 -& XML 的转换,即使没有 XML 字段,由于XML本身的文本特性,也可以将其作为字符串 或 CLOB 存储,只有数据本身不是XML,而是用二维表格存在数据库中时,才需要 表 -& XML 转换
把数据存储到 XML 文件
创建并保存 XML 文件
如果数据要被传送到非 Windows 平台上的应用程序,那么把数据保存在 XML 文件中是有好处的。请记住,XML 有很强的跨平台可移植性,并且数据无需转换!
首先,我们将学习如何创建并保存一个 XML 文件。下面的这个 XML 文件将被命名为 "test.xml",并被保存在服务器上的 c 目录中。我们将使用 ASP 和微软的 XMLDOM 对象来创建并保存这个 XML 文件:&%
Dim xmlDoc, rootEl, child1, child2, p
'创建XML文档
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
'创建根元素并将之加入文档
Set rootEl = xmlDoc.createElement("root")
xmlDoc.appendChild rootEl
'创建并加入子元素
Set child1 = xmlDoc.createElement("child1")
Set child2 = xmlDoc.createElement("child2")
rootEl.appendChild child1
rootEl.appendChild child2
'创建 XML processing instruction
'并把它加到根元素之前
Set p=xmlDoc.createProcessingInstruction("xml","version='1.0'")
xmlDoc.insertBefore p,xmlDoc.childNodes(0)
'把文件保存到 C 目录
xmlDoc.Save "c:\test.xml"
如果您打开这个被保存的文件,它会使这个样子 ("test.xml"):&?xml version="1.0"?&
&child1 /&
&child2 /&
真实的表单例子
现在,我们看一个真实的表单例子。
我们首先看一下这个被用在例子中的 HTML 表单:下面的HTML表单要求用户输入他们的名字、国籍以及电子邮件地址。随后这些信息会被写到一个 XML 文件,以便存储。
"customers.htm":&html&
&form action="saveForm.asp" method="post"&
&h1&请输入您的联系信息:&/h1&
&label&名字: &/label&
&p&&input type="text" id="firstName" name="firstName"&&/p&
&label&姓氏: &/label&
&p&&input type="text" id="lastName" name="lastName"&&/p&
&label&国家: &/label&
&p&&input type="text" id="country" name="country"&&/p&
&label&邮件: &/label&
&p&&input type="text" id="email" name="email"&&/p&
&input type="submit" id="btn_sub" name="btn_sub" value="Submit"&
&input type="reset" id="btn_res" name="btn_res" value="Reset"&
用于以上 HTML 表单的 action 被设置为 "saveForm.asp"。"saveForm.asp" 文件是一个 ASP 页面,可循环遍表单域,并把它们的值存储在一个 XML 文件中:&%
dim xmlDoc
dim rootEl,fieldName,fieldValue,attID
'如果有错误发生,不允许程序终止
On Error Resume Next
Set xmlDoc = server.CreateObject("Microsoft.XMLDOM")
xmlDoc.preserveWhiteSpace=true
'创建并向文档添加根元素
Set rootEl = xmlDoc.createElement("customer")
xmlDoc.appendChild rootEl
'循环遍历 Form 集
for i = 1 To Request.Form.Count
'除去表单中的 button 元素
if instr(1,Request.Form.Key(i),"btn_")=0 then
'创建 field 和 value 元素,以及 id 属性
Set fieldName = xmlDoc.createElement("field")
Set fieldValue = xmlDoc.createElement("value")
Set attID = xmlDoc.createAttribute("id")
'把当前表单域的名称设置为 id 属性的值
attID.Text = Request.Form.Key(i)
'把 id 属性添加到 field 元素
fieldName.setAttributeNode attID
'把当前表单域的值设置为 value 元素的值
fieldValue.Text = Request.Form(i)
'将 field 元素作为根元素的子元素进行添加
rootEl.appendChild fieldName
'将 value 元素作为 field 元素的子元素进行添加
fieldName.appendChild fieldValue
'添加 XML processing instruction
'并把它加到根元素之前
Set p = xmlDoc.createProcessingInstruction("xml","version='1.0'")
xmlDoc.insertBefore p,xmlDoc.childNodes(0)
'保存 XML 文件
xmlDoc.save "c:\Customer.xml"
'释放所有的对象引用
set xmlDoc=nothing
set rootEl=nothing
set fieldName=nothing
set fieldValue=nothing
set attID=nothing
set p=nothing
'测试是否有错误发生
if err.number&&0 then
response.write("Error: No information saved.")
response.write("Your information has been saved.")
注释:如果指定的 XML 文件名已经存在,那个文件会被覆盖!
XML 文件会由上面的代码生成,大致的样子是这样的:("Customer.xml"):&?xml version="1.0" ?&
&customer&
&field id="firstName"&
&value&David&/value&
&field id="lastName"&
&value&Smith&/value&
&field id="country"&
&value&China&/value&
&field id="email"&
&value&&/value&
&/customer&
XML文件XPATH查询方法vb中使用DomDocument对象操作xml时,若要使用XPath中的内部函数,需要进行如下设置&dim dom as DomDocumentdom.setProperty
"SelectionLanguage", "XPath"&XML 路徑語言 (XPath) 查詢可以用來利用 DOM 方法 (如 selectNodes 或 selectSingleNode 查詢 XML 文件。預設會使用的查詢是 XSLPattern 回溯相容性。若要用以 XPath 變更 [以 XPath 的 [DOMDocument 的 SelectionLanguage 內部屬性]。XPath 新增很多的功能 ; 比方說它可讓您使用如 字串長度 和 加總 函數。下列的程式碼範例示範如何使用 XPath 與 selectNodes 方法:
啟動 Visual Basic,並建立新的標準執行檔。
[] 選取 [專案]、 選取 [參考],然後再新增 [Microsoft XML、 v3.0 的參考]。
將下列程式碼加入至 Form_Load 事件: Dim dom As DOMDocument30
Dim nodelist As IXMLDOMNodeList
Dim strPath As String
Set dom = New DOMDocument30
dom.async = False
dom.loadXML "&Admin&&Area AreaName='a'/&&/Admin&"
dom.setProperty "SelectionLanguage", "XPath"
strPath = "/Admin/Area[string-length(@AreaName) = 1]"
Set nodelist = dom.documentElement.selectNodes(strPath)
Debug.Print "Found " & nodelist.length & " Node"
4,執行該應用程式,並請注意 [即時運算] 視窗會顯示 找到 1 節點。
5,若要顯示預設的註解出呼叫 setProperty 程式碼行行為。因為再執行程式碼會產生錯誤訊息 XSL 模式比對不支援 字串長度 函式。&
发表评论:
TA的最新馆藏[转]&读大数据量的XML文件的读取问题
字体:[ ] 类型:转载 时间:
对于数据量较大的xml文件,使用xmlDocument读取时,虽然支持XPath,查询比较方便,但是需要先load,这样就浪费了内存,使用起来速度比较慢。
而如果使用XMLReader的话,不需要缓存,读取速度很快,但是如果要查询就不那么方便了,不支持XPath,只能通过Reader()方法前向循环。为了避免以上两种方法的缺点,想出以下方案: 1、先使用XMLReader将XML文件的内容读取到一个链表中。 2、查询的时候查询链表就可以了(可以在定义链表的类中定义查询函数,要查询的时候直接调用函数就可以了,非常方便)。 结果证明:速度和查询效果都很好。
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具您的位置:>>>大洋新闻>正文
在关系数据库中保存大量XML文档
11:55来源:
当在关系数据库中保存XML文档的时候,由于采用方法上的原因,尤其是对于大量的文档,你一定碰到过很多问题。这一篇文章将提出与大量XML文档相关的特定的问题,然后给出解决这些问题的方法。
数量非常大的文档的潜在问题
什么东西使得一个XML文档变得非常巨大?一个XML文档变得巨大的其中一个迹象是文档启动的时候就出现问题。现在让我们讨论其中的潜在问题。
首先是有关原始空间(raw
space)的观点。出现的问题与频率和空间相关。并不是你的文档大于通常情况下的状态,而是你频繁地使用它们。你必须需要有一个良好的尺寸数据分区来存放这些文档(或者数据库)。
第二,运行数据库可能会产生错误。有时候XML文档会分成多个部分,并存放在代表XML文档结构的不连续的表中,但通常情况下,XML文档存放在BLOB域,文本域,或者VARCHAR域中。
除在设计上的缺欠之外,你还有可能碰到与数据库相互通讯的界面上的问题。例如,绝大多数SQL执行都限制数据为4,096字节——这就意味着,当使用SQL必向数据库发送10KB文档的时候,你会遭到障碍。在数据库存储程序中也会存在类似的限制。如果你没有意识到这些限制以及你的文档超出范围,你将会碰到这些问题。
开发人员和数据库管理人员必须清楚地理解XML文档中将要产生的操作,这样才有可能正确地设计数据库。理解数据库将如何被使用也同样是相当的重要。你的XML文档是简单的连续存放机制?还是存放在非连续的状态之中?
如果你以整块方式存储整个文档,这样你就有多种选择。对于非连续数据,你应该设计出代表XML结构的表,并将数据分开存放在独立的表中。第二个步骤的优点是在于可索引性和可查询性,而你不需要对整个文档进行操作。
BLOB(二进制大型对象)域被用于存储大型的二进制格式的数据。例如,加密文件常用于BLOB域。BLOB域非常适合于存放XML文件。BLOB域的缺点是它不是可索引性和可查询性,以及不能通过标准的SQL与BLOB交换大量的数据。
解决SQL限制的其中一个方法是将XML文档分割成为4KB或小的块。这些小块再存放在表中,然后使用ID域将这些小块联系起来。
当你存储这些文档的时候,你应该将它们分割成为小块并存放在表中。当你返回文档时,你通过特定的ID选择所有的块,然后以合适的顺序对它们进行集合。虽然比较麻烦,但这一方法对于多数据库非常有用。
捆绑及BLOB访问
大型BLOB数据的问题在于你不能使用SQL存储和获得数据。近年来每一种数据库商家都具有自己的存储和获得大型对象的方法。
为了在一个BLOB域中存储大量的XML文档,你必须使用捆绑(binding)。捆绑是将数据从程序代码与数据库中的域相互联系的过程。使用这一方法,当改变数据库的时候,会有可能影响数据库的其他功能。
在关系数据库中存储大量XML文档会导致很多问题。解决这些问题的首要步骤是深刻理解XML文档中的参数。然后正确地设计合适的解决方法。解决方法可以包括:一系列的结构表,将XML文档分割为小块,或者直接捆绑到数据库中的BLOB域。
(编辑: keji)
更多精彩内容尽在广州日报大洋网()
随时随地畅享资讯
订制《广州日报》手机报:发送AA到
订制《信息时报》手机报:发送AB到
一键分享:
文明上网 理性发言
用户名: 密码:
赞助商链接POI读取文件有两种方式,一种是使用usermodel方式读取,这种方式的优势是统一,读取.xls文件的HSSFWorkbook与读取.xlsx文件的XSSFWorkbook两个类都实现了Workbook接口。另外一种是eventusermodel方式读取,这种方式比前面一种方式读取复杂很多,并且对与2003版本和2007版本的Excel处理没有统一接口,需要了解Excel的内部文件组织原理,但是效率却比第一种方式快得多,并却能轻松读取大量数据的Excel文件,而不会把内存溢出。本文也是主要介绍使用eventusermodel方式读取2007版本的Excel文件。 eventusermodel其实是使用了XML的文件格式读取Excel的,因为Excel内部组织也是通过XML实现了(可以把后缀名改为.zip)。 xl\worksheets\sheet1.xml
- 第一个sheet的内容 &?xml ="1.0" encoding="UTF-8" standalone="yes"?&&worksheet xmlns="http://schemas.openxmlmats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlmats.org/Document/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas..com/office/spreadsheetml/2009/9/ac"&&dimension ref="A1:D1"/&&sheetViews&&sheetView workbookViewId="0"&&selection sqref="A1:XFD1"/&&/sheetView&&/sheetViews&&sheetFormatPr defaultRowHeight="13.5" x14ac:dyDescent="0.15"/& &sheetData&
&row r="1" spans="1:4" x14ac:dyDescent="0.15"&
&c r="A1" t="s"&&v&0&/v&&/c&
&c r="B1" t="s"&&v&1&/v&&/c&
&c r="C1" t="s"&&v&2&/v&&/c&
&c r="D1" t="s"&&v&15&/v&&/c&
&/row& &/sheetData&&phoneticPr fontId="1" type="noConversion"/&&pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/&&pageSetup paperSize="0" orientation="portrait" horizontalDpi="0" verticalDpi="0" copies="0"/&&/worksheet&&c /&标签表示单元格,t=“s”,说明当前的单元格类型是,那此时&v&0&/v&,0则是在sharedStrings.xml的一个索引值。是&si /&标签序号。
xl\sharedStrings.xml - Excel文件中字符串的值,如其内容片段 &si& &t&col1&/t&&phoneticPr fontId="1" type="noConversion"/&&/si&&si& &t&col2&/t&&phoneticPr fontId="1" type="noConversion"/&&/si& POI的eventusermodel也是通过这样的原理读取Excel文件的。首先读取Excel文件,取得XSSFReader实例: XSSFReader reader =
new XSSFReader(OPC.open(file));XMLReader xmlReader = XMLReaderFactory.createXMLReader("org..xerces.parsers.SAXParser");// sharedStrings.xml实体SharedStringsTable table = reader.getSharedStringsTable();xmlReader.setContentHandler(new ContentHandler()//实现该接口的一个实例);InputStream sheet = reader.getSheet("rId"+sheetId);InputSourcesheetSource
new InputSource(sheet )xmlReader.parse(sheetSource); package net.import .io.Fimport .io.FileWimport java.io.IOEimport mons.lang.StringUimport org.apache.poi.xssf.model.SharedStringsTimport org.xml.sax.Aimport org.xml.sax.SAXEimport org.xml.sax.helpers.DefaultHpublic class TestContentHandler extends DefaultHandler{ private SharedStringsT
private boolean isS
private FileW
public TestContentHandler(SharedStringsTable table){
this.table = } /* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/ @Override public void characters(char[] ch, int start, int length)
throws SAXException {
value = /blog/new String(ch,start,length); } /* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endDocument()
*/ @Override public void endDocument() throws SAXException {
writer.flush();
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/ @Override public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("v")){
if(isString) value = /blog/table.getEntryAt(Integer.valueOf(value.trim())).getT();
writer.write(value+",");
if(qName.equals("row")){
writer.write("\r\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startDocument()
*/ @Override public void startDocument() throws SAXException {
File file = new File("D:/test.txt");
if(file.exists()) file.delete();
writer = new FileWriter(file);
} catch (IOException e) {
e.printStackTrace();
} } /* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/ @Override public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equals("c")){
String type = attributes.getValue("t");
if(StringUtils.isNotBlank(type) && type.equals("s")){
isString =
isString =
value/blog/= ""; }

我要回帖

更多关于 xml中存放文件 的文章

 

随机推荐