我已经看到在几个在线示例中使用了以下方法,但是没有找到有关解析XML提要的推荐方法的任何文档。
方法1:
protected function xmlResponseHandler(event:ResultEvent):void
{
var atom:Namespace = new Namespace("http://www.w3.org/2005/Atom");
var microsoftData:Namespace = new Namespace("http://schemas.microsoft.com/ado/2007/08/dataservices");
var microsoftMetadata:Namespace = new Namespace("http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
var ac:ArrayCollection = new ArrayCollection();
var keyValuePairs:KeyValuePair;
var propertyList:XMLList = (event.result as XML)..atom::entry.atom::content.microsoftMetadata::properties;
for each (var properties:XML in propertyList)
{
keyValuePairs = new KeyValuePair(properties.microsoftData::FieldLocation, properties.microsoftData::Locationid);
ac.addItem(keyValuePairs);
}
cb.dataProvider = ac;
}
方法2:
protected function xmlResponseHandler(event:ResultEvent):void
{
namespace atom = "http://www.w3.org/2005/Atom";
namespace d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
namespace m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
use namespace d;
use namespace m;
use namespace atom;
var ac:ArrayCollection = new ArrayCollection();
var keyValuePairs:KeyValuePair;
var propertyList:XMLList = (event.result as XML)..entry.content.properties;
for each (var properties:XML in propertyList)
{
keyValuePairs = new KeyValuePair(properties.FieldLocation, properties.Locationid);
ac.addItem(keyValuePairs);
}
cb.dataProvider = ac;
}
方法3:
protected function xmlResponseHandler(event:ResultEvent):void
{
var ac:ArrayCollection = new ArrayCollection();
var keyValuePairs:KeyValuePair;
var propertyList:XMLList = (event.result as XML)..*::entry.*::content.*::properties;
for each (var properties:XML in propertyList)
{
keyValuePairs = new KeyValuePair(properties.*::FieldLocation, properties.*::Locationid);
ac.addItem(keyValuePairs);
}
cb.dataProvider = ac;
}
示例XML Feed:
<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<feed xml:base="http://www.test.com/Test/my.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<title type="text">Test_Locations</title>
<id>http://www.test.com/test/my.svc/Test_Locations</id>
<updated>2010-04-27T20:41:23Z</updated>
<link rel="self" title="Test_Locations" href="Test_Locations" />
<entry>
<id>1</id>
<title type="text"></title>
<updated>2010-04-27T20:41:23Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Test_Locations" href="http://www.test.com/id=1" />
<category term="MySQLModel.Test_Locations" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:FieldLocation>Test Location</d:FieldLocation>
<d:Locationid>test0129</d:Locationid>
</m:properties>
</content>
</entry>
<entry>
<id>2</id>
<title type="text"></title>
<updated>2010-04-27T20:41:23Z</updated>
<author>
<name />
</author>
<link rel="edit" title="Test_Locations" href="http://www.test.com/id=2" />
<category term="MySQLModel.Test_Locations" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<content type="application/xml">
<m:properties>
<d:FieldLocation>Yet Another Test Location</d:FieldLocation>
<d:Locationid>test25</d:Locationid>
</m:properties>
</content>
</entry>
</feed>
答案 0 :(得分:1)
第三个完全忽略了通过忽略命名空间来实现命名空间的目的。所以这是一个不。
在前两种方法中,虽然它可能导致一些额外的击键,但我更喜欢第一种方法,因为它明确说明了每个标识符引用的命名空间。
我还必须补充一点,第二种方法对我来说是新的 - 还没有遇到过。