XML 格式文件的获取

      Flash课件设计 2008-12-16 13:19

  有数据库的情况下,XML文件的获取并不是难事,但有时候就只有Excel或是Word文档,这种情况下就需要将文本格式进行转换。Excel或是Word 都具有另存为XML格式文件的功能,但这样得到的XML无关信息过多,不适合拿来编程。XML Explorer 是一个比较常用的XML格式转换工具,利用文本导入的办法会比较方便。

  具体步骤:

1、将Excel文件中选定的数据复制,粘贴到Word中,成为Word表格,在表格的第一行输入每个列(字段)的标题。

2、选中整个表格,点击“表格”菜单-》转换-》将表格转换成文本。选一个表格内容中不存在的字符做为分隔符(比如用@##$ %^&不常用的字符)。之后保存成文本文件。

3、打开XML Explorer “工具”菜单-》导入文本文件,选择文件,指定好分格符,再选择 First Row as Fields Name (首行做为字段名),再确定即可完成转换,再保存即可。

另外,替换Word硬回车符的表示符为 ^p,当有过多的空行时,可以用替换将 ^p^p 换成 ^p 就可以起到缩减空行的效果。

举个例子,Excel中建立如下表格,(利用填充功能很快就可以完成)。

1 60 Golf Tigger 2008-1-23
2 60 Golf Tigger 2008-1-24
3 60 Golf Tigger 2008-1-25
4 60 Golf Tigger 2008-1-26
5 60 Golf Tigger 2008-1-27
6 60 Golf Tigger 2008-1-28
7 60 Golf Tigger 2008-1-29
8 60 Golf Tigger 2008-1-30
9 60 Golf Tigger 2008-1-31
10 60 Golf Tigger 2008-2-1
11 60 Golf Tigger 2008-2-2
12 60 Golf Tigger 2008-2-3

在Word中将表格转换成文本,转换之前加入一行标题行,分隔符选择“&”转换之后效果如下:

id&price&products&operator&date

1&60&Golf&Tigger&2008-1-23

2&60&Golf&Tigger&2008-1-24

3&60&Golf&Tigger&2008-1-25

4&60&Golf&Tigger&2008-1-26

5&60&Golf&Tigger&2008-1-27

6&60&Golf&Tigger&2008-1-28

7&60&Golf&Tigger&2008-1-29

8&60&Golf&Tigger&2008-1-30

9&60&Golf&Tigger&2008-1-31

10&60&Golf&Tigger&2008-2-1

11&60&Golf&Tigger&2008-2-2

12&60&Golf&Tigger&2008-2-3

将文本保存以后,在XML explorer中导入,进而得到如下的XML文本:

<data>
 <row>
  <id>1</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-23</date>
 </row>
 <row>
  <id>2</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-24</date>
 </row>
 <row>
  <id>3</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-25</date>
 </row>
 <row>
  <id>4</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-26</date>
 </row>
 <row>
  <id>5</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-27</date>
 </row>
 <row>
  <id>6</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-28</date>
 </row>
 <row>
  <id>7</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-29</date>
 </row>
 <row>
  <id>8</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-30</date>
 </row>
 <row>
  <id>9</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-31</date>
 </row>
 <row>
  <id>10</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-2-1</date>
 </row>
 <row>
  <id>11</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-2-2</date>
 </row>
 <row>
  <id>12</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-2-3</date>
 </row>
</data>

Flash 中加载XML文件之后,中文显示不正常,通常是因为文本编码的问题,解决的办法是用写字本或记事本打开XML文件,另存为 编码为 Unicode的文件,这样就可以开始XML的编程练习了。

加载和遍历访问的代码如下:

var myXML:XML = new XML();
var XML_URL:String = "sale.xml";
var myLoader:URLLoader = new URLLoader(new URLRequest(XML_URL));
myLoader.addEventListener("complete", xmlLoaded);
var myArra:Array = new Array();

function xmlLoaded(event:Event):void {
 myXML = XML(myLoader.data);
 trace("Data loaded.",myXML.row[0].id);// myXML 就直接代表了根结点 data ,直接使用 row[0]可以访问到表格第一条记录

 for each (var element:XML in myXML.elements()) {
     myArra.push([element.id,element.price,element.operator,element.date]); // 将XML转换成数组记录
  }
}

补充:

   XML Explorer 在导入文本文件时,对回车符会当成是独的一条记录。

比如文本文件如下:

id&price&products&operator&date
1&60&Golf&Tigger&200
8-1-23
2&60&Golf&Tigger&200
8-1-24
3&60&Golf&Tigger&200
8-1-25
4&60&Golf&Tigger&2008-1-26

转换后的XML文件为:

<data>
 <row>
  <id>1</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>200</date>
 </row>
 <row>
  <id>8-1-23</id>
  <price></price>
  <products></products>
  <operator></operator>
  <date></date>
 </row>
 <row>
  <id>2</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>200</date>
 </row>
 <row>
  <id>8-1-24</id>
  <price></price>
  <products></products>
  <operator></operator>
  <date></date>
 </row>
 <row>
  <id>3</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>200</date>
 </row>
 <row>
  <id>8-1-25</id>
  <price></price>
  <products></products>
  <operator></operator>
  <date></date>
 </row>
 <row>
  <id>4</id>
  <price>60</price>
  <products>Golf</products>
  <operator>Tigger</operator>
  <date>2008-1-26</date>
 </row>
</data>

对于这种情况可以用程序的办法来处理,在上面的例子中,仅date项存在回车,那么,如果某条记录仅有id 项,其它项都为空时,该项可以判定为上一条记录的date内容。将该项与上一项的date内容进行合并即可得到正确的记录内容。

核心代码如下:

for each (var element:XML in myXML.elements()) {
  if ( element.date!= "" ) {
   myArra.push([element.id,element.date]);
  } else {
   var t:uint = myArra.length -1;
   var s:String = myArra[t][1]; // 取出上一条记录中的date值,上一条记录位于数组的末尾。
   myArra[t][3] = s +"\n" + element.id;// 更新记录的内容,将记录中的回车符补回来。
  }
 }

上面的办法适合记录中某一项内容具有多个段落,如果多个字段中存在回车符,那么可以考虑将该表格拆分开,再分别用上面的办法进行处理,最后根据ID号将数组进行合并。

标签集:TAGS:XML 文件 格式
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}