如何在AS3中获取XML标记名

如何在AS3中获取XML标记名,xml,apache-flex,actionscript-3,Xml,Apache Flex,Actionscript 3,我正在尝试在AS3程序中获取子XML标记名。例如,我有一个包含以下信息的文件: <LocationInfo> <City>New York City</City> <State>NY</State> <Zip>10098</Zip> </LocationInfo> 纽约市 纽约 10098 我将文件加载到ArrayCollection中,并可以通过名称(如 [“城市”]//返回

我正在尝试在AS3程序中获取子XML标记名。例如,我有一个包含以下信息的文件:

<LocationInfo>
   <City>New York City</City>
   <State>NY</State>
   <Zip>10098</Zip>
</LocationInfo>

纽约市
纽约
10098
我将文件加载到ArrayCollection中,并可以通过名称(如 [“城市”]//返回纽约


我想做的不是获取值,而是获取标记名,如State或Zip,而不是NY或10098。

每个LocationInfo标记都成为ArrayCollection中的一个条目。每个条目都是一个动态对象,因此您真正要问的是如何从动态对象获取属性名称。这个问题已经得到了回答,尽管他们提出了不同的问题。以下是指向原始页面的链接:

以下是最直接的答案:

var obj:Object; // I'm assuming this is your object

for(var id:String in obj) {
  var value:Object = obj[id];

  trace(id + " = " + value);
}

每个LocationInfo标记都将成为ArrayCollection中的一个条目。每个条目都是一个动态对象,因此您真正要问的是如何从动态对象获取属性名称。这个问题已经得到了回答,尽管他们提出了不同的问题。以下是指向原始页面的链接:

以下是最直接的答案:

var obj:Object; // I'm assuming this is your object

for(var id:String in obj) {
  var value:Object = obj[id];

  trace(id + " = " + value);
}
可以使用该属性获取XMLNode的元素名称

比如:

var xml : XML = <LocationInfo>...</LocationInfo>;

foreach(var child : XMLNode in xml.LocationInfo.childNodes)
{
    trace(child.localName + " = " + child.nodeValue);
}
var-xml:xml=。。。; foreach(var child:xml.LocationInfo.childNodes中的XMLNode) { 跟踪(child.localName+“=”+child.nodeValue); } 您可以使用该属性获取XMLNode的元素名称

比如:

var xml : XML = <LocationInfo>...</LocationInfo>;

foreach(var child : XMLNode in xml.LocationInfo.childNodes)
{
    trace(child.localName + " = " + child.nodeValue);
}
var-xml:xml=。。。; foreach(var child:xml.LocationInfo.childNodes中的XMLNode) { 跟踪(child.localName+“=”+child.nodeValue); }
在处理XML时,使用XMLListCollection几乎总是更好。在大多数情况下,您实际上不需要ArrayCollection的附加功能,XMLListCollection肯定会让事情变得更简单。此外,ArrayCollections并不总是正确地序列化内容。我不能给出具体的情况,但我知道我必须重构,因为XML没有正确存储。最后,
XMLListCollection.toXMLString()
将为您提供比
ArrayCollection.toString
更好的数据状态视图

对于XMLListCollection,您要查找的内容可以通过以下方式之一完成:

var coll:XMLListCollection = <xml-here/>

// Iterate through all of the children nodes
for( var i:int = 0; i < coll.children().length(); i++ )
{
    var currentNode:XML = coll.children()[ i ];
    // Notice the QName class?  It is used with XML.
    // It IS NOT a String, and if you forget to cast them, then
    // currentNode.localName() will NEVER be "city", even though it may
    // trace that way.
    var name:QName      = currentNode.name(); // url.to.namespace::city
    var locName:QName   = currentNode.localName() // City
}

// get all city nodes in the current parent element
var currCities:XMLList = currentParentNode.cities; // currentParentNode can be 
// an XMLList, an XML object, an XMLListAdapter, or an XMLListCollection.
// This means that you can do something like coll.cities.cities, if there are
// children nodes like that.
for( i = 0; i < cities.length(); i++ )
{
    var currentCity:XML = cities[ i ];
}

// get all city nodes in all descendant nodes.
var cities:XMLList = currentParentNode.descendants( 
                         new QName( "url.to.namespace", "City" ) 
                     );
for( i = 0; i < cities.length(); i++ )
{
    var currentCity:XML = cities[ i ];
}

在处理XML时,使用XMLListCollection几乎总是更好。在大多数情况下,您实际上不需要ArrayCollection的附加功能,XMLListCollection肯定会让事情变得更简单。此外,ArrayCollections并不总是正确地序列化内容。我不能给出具体的情况,但我知道我必须重构,因为XML没有正确存储。最后,
XMLListCollection.toXMLString()
将为您提供比
ArrayCollection.toString
更好的数据状态视图

对于XMLListCollection,您要查找的内容可以通过以下方式之一完成:

var coll:XMLListCollection = <xml-here/>

// Iterate through all of the children nodes
for( var i:int = 0; i < coll.children().length(); i++ )
{
    var currentNode:XML = coll.children()[ i ];
    // Notice the QName class?  It is used with XML.
    // It IS NOT a String, and if you forget to cast them, then
    // currentNode.localName() will NEVER be "city", even though it may
    // trace that way.
    var name:QName      = currentNode.name(); // url.to.namespace::city
    var locName:QName   = currentNode.localName() // City
}

// get all city nodes in the current parent element
var currCities:XMLList = currentParentNode.cities; // currentParentNode can be 
// an XMLList, an XML object, an XMLListAdapter, or an XMLListCollection.
// This means that you can do something like coll.cities.cities, if there are
// children nodes like that.
for( i = 0; i < cities.length(); i++ )
{
    var currentCity:XML = cities[ i ];
}

// get all city nodes in all descendant nodes.
var cities:XMLList = currentParentNode.descendants( 
                         new QName( "url.to.namespace", "City" ) 
                     );
for( i = 0; i < cities.length(); i++ )
{
    var currentCity:XML = cities[ i ];
}