Posts tagged ‘xml’

SlideshowPro for flash

SlideShowPro for flash is a photo and video slideshow component that can be embedded in Flash. It is flexible and easy-customized. We have used it in our photo gallery flash and it works well.

check it here. It’s not free:)

the configuration is very simple, you can just open component panel in Flash and drag-drop SlideShowPro on stage. The configuration panel looks like:

slideshowpro component panel

slideshowpro component panel

SlideShowPro will read xml file for configuration, which specify images and their path. here is demo of xml:

<?xml version="1.0" encoding="UTF-8"?>
<gallery>
  <album title="Samples" description="XXXXX" 
         lgPath="path/of/images/">
	<img src="001.jpg" /> 
    <img src="002.jpg" />
    <img src="003.jpg" />
    <img src="004.jpg" />
    <img src="005.jpg" />
  </album>
</gallery>

Convert DataGrid to Excel in AIR

It’s heard that Flex can convert DataGrid to XML Spreadsheet, then submit xml to server in order to create Excel file for downloading. But AIR can directly output xml and write it into native file. That’s greate, the only problem is how to convert DataGrid to XML Spreadsheet, which is one of xls formats. I implemented it in my project.

check spec of xml spreadsheet format here.

download XMLSpreadsheet.as.

Actionscript 解析XML错误一例

如果确认XML格式正确,但是老是有这么个错误“文档中根元素后面的标记格式必须正确”。那么要小心了,其实是actionscirpt的解析器有问题。这个问题通常发生在:

var config:XML = new XML(configContent);

类似这样的语句中,configContent是一个XML的字符串。这里不能用XML而得用XMLList。

tinyxml小例子

上次没写完。话说tinyxml有一套很简洁的类继承关系,其中TiXmlDocument指向的就是整个XML档案。一般来讲,读入XML有这么两个途径:

  • 来自文件(可惜tinyxml不支持远程的文件,这里指的是你磁盘上的文件)。可用TiXmlDocument的LoadFile解析。
  • 来自字符串。可用TiXmlDocument的Parse方法解析。

分析XML的话就用常规的遍历,tinyxml类库给每种节点都规定了类型(type),见TiXmlNode::Type()方法,共有这么几类:

		Document:	filename of the xml file
		Element:	name of the element
		Comment:	the comment text
		Unknown:	the tag contents
		Text:		the text string

一般常用的就是Element和Text。剩下的就是根据type和value来提取需要信息啦。见下面的例子:

void ParseUpdateXML(TiXmlNode *pParent)
{
	if (pParent == NULL)
	{
		return;
	}
 
	TiXmlNode *pchild = pParent->FirstChild();
	for (; pchild!=NULL ; pchild = pchild->NextSibling())
	{
		int t = pchild->Type();
		switch (t)
		{
		case TiXmlNode::ELEMENT:
			//std::cout<<pchild->Value()<<std::endl;
			ParseUpdateXML(pchild);
			break;
		case TiXmlNode::TEXT:
			//something
			break;
		}
	}
}
//success, then begin to parse with tinyxml
TiXmlDocument *root = new TiXmlDocument();
root->Parse(pData);
ParseUpdateXML(root->RootElement());

不错的轻量型XML C++ 类库 — tinyxml

如果只是简单的解析一下基本XML结构,用tinyxml很方便,甚至他非常像AS的XML模型(呵呵,应该说普天下的解析模型都差不多)。怎么说,应该去看看它的主页:http://www.grinninglizard.com/tinyxml/

tinyxml本身是开源且免费的。从sourceforge上下载源代码然后在visual studio上编译(默认是以mulit-byte编码编译的,我改成了unicode)。之后只需要两个头文件tinyxml.h和tinystr.h,还有一个100多k的lib:tinyxml.lib。就这些玩意儿不复杂。

来看看它的文档:

tinyxml

tinyxml

http://www.grinninglizard.com/tinyxmldocs/classTiXmlBase.html

今天写的比较匆忙,以后把小例子贴上。

minidom解析XML用起来和AS2差不多

python 自带了minidom库来解析xml,用起来还算比较简单,很像一个原始版的函数库。如果看一下python manual,minidom的脉路还是很清晰的,以Node(节点)为基本要素。基本上和AS2的解析方式差不多。minidom包含如下几种Node类别:

  • Node
  • NodeList
  • DocumentType
  • Document
  • Element
  • Attr
  • Comment
  • Text
  • ProcessingInstructure

貌似几乎涵盖了所有xml元素。其中Node是所有XML元素的基类。里面最最常用的就是Document,Element和Text了。

  • Document代表了xml文档,由一个很常用的属性叫documentElement,就是根节点,是一个Element对象。一般用parse解析xml文件,或者用parseString转换xml样式的字符串,来得到Document
  • Element代表一般节点,常用属性有tagName(节点名称)等。通常都是用遍历方式来获得子节点的。minidom有个比较恼人的地方就是它不能忽略注释和空白,所以在遍历的时候要注意查看nodeType(Node类的属性,节点类型,Element是1,Text是3),然后再去看tagName。
  • Text是文本节点。比如有一段xml:<p>paragraph</p>。它是一个Element,那么Element的子节点就是Text节点,如果要获得字符串就用data属性。按这个例子,获得字符串paragraph的方法是:Element.firstChild.data

minidom解析xml还算比较方便。俺也是刚入门。以后学多了继续写啊。

mxml里的转义字符

mxml也就是xml,有些特殊字符是不能直接写的,不然就破坏xml的结构了。下面就是需要转义的字符。

<

&lt;

>

&gt;

&

&amp;

&quot;

&apos;

时候不晓得为什么CDATA里也不能用呢,特别是&&。