QName

顶级
public final class QName
继承 QName Inheritance Object
语言版本 :  ActionScript 3.0
Player 版本 :  Flash Player 9
QName 对象表示 XML 元素和属性的限定名。 每个 QName 对象都具有一个本地名称和一个命名空间统一资源标识符 (URI)。 命名空间 URI 的值为 null 时,QName 对象可与任意命名空间匹配。 使用 QName 构造函数创建新的 QName 对象,该对象可以是另一个 QName 对象的副本,也可以是带有来自 Namespace 对象的 uri 和来自 QName 对象的 localName 的新 QName 对象。

特定于 E4X 的方法可以交替使用 QName 对象和字符串。 E4X 方法位于 QName、Namespace、XML 和 XMLList 类中。 这些 E4X 方法,既可以获取字符串,也可以获取 QName 对象。 这种互换性说明了命名空间如何支持诸如 XML.child() 方法的使用。

QName 类(与 XML、XMLList 和 Namespace 类一起)可实现强大的 XML 处理标准,该标准在 XML (E4X) 规范(ECMA-357 第 2 版)的 ECMAScript 中定义。

限定标识符的计算结果为 QName 对象。 如果指定了 XML 元素的 QName 对象而未标识命名空间,则将关联的 QName 对象的 uri 属性设置为全局默认命名空间。 如果指定了 XML 属性的 QName 对象而未标识命名空间,则将 uri 属性设置为空字符串。

QNameExample.as

下面的示例说明如何创建 QName 实例,并使用它选择 XML 元素。 下面说明了创建 QName 的两种方法:
  1. 创建 Namespace 实例,然后将其用作 QName 构造函数的输入。 如果稍后要将 Namespace.prefix 属性用作其它目的,则此方法是最佳方法。
  2. 使用 QName 构造函数中 uri 参数的简单字符串值创建 QName 实例。

此代码将执行以下操作:

  1. 定义一个 XML 变量,名为 rssXML
  2. 创建一个新 Namespace 对象,其前缀为 dc
  3. 创建新的 QName 对象,方法是使用 Namespace 对象和本地名称 creator
  4. 调用 showDescendants() 方法,该方法使用 XML.descendants() 方法获取一个 XMLList 实例,其中包含限定名称与给定的 QName 实例相匹配的所有后代元素。
  5. 显示列表中每个元素的限定名称和文本值(使用 for each 循环)。
  6. 使用 uri 参数的字符串值和局部名称 date 创建另一个 QName 对象。
  7. 再次调用 showDescendants() 方法以显示后代元素的名称和文本值。
package
{
    import flash.display.Sprite;
    
    public class QNameExample extends Sprite
    {
        public function QNameExample()
        {
            var rssXML:XML =  <rdf:RDF
              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
              xmlns="http://purl.org/rss/1.0/"
              xmlns:dc="http://purl.org/dc/elements/1.1/">
              <channel rdf:about="http://www.xml.com/cs/xml/query/q/19">
                <title>Test RSS</title>
                <link>http://www.adobe.com/</link>
                <description>This is a test RSS document.</description>
                <language>en-us</language>
                <items>
                  <rdf:Seq>
                <rdf:li rdf:resource="http://www.adobe.com/devnet/flash/"/>
                <rdf:li rdf:resource="http://www.adobe.com/devnet/flex/"/>
                  </rdf:Seq>
                </items>
              </channel>
              <item rdf:about="http://www.adobe.com/devnet/flash/">
                <title>Flash Developer Center</title>
                <link>http://www.adobe.com/devnet/flash/</link>
                <description>Welcome to the Flash Developer Center</description>
                <dc:creator>Adobe</dc:creator>
                <dc:date>2005-08-08</dc:date>    
              </item>
              <item rdf:about="http://www.adobe.com/devnet/flex/">
                <title>Flex Developer Center</title>
                <link>http://www.adobe.com/devnet/flex/</link>
                <description>Welcome to the Flex Developer Center</description>
                <dc:creator>Adobe</dc:creator>
                <dc:date>2005-10-16</dc:date>    
              </item>
            </rdf:RDF>;
            
            var dcNamespace:Namespace = new Namespace("dc", "http://purl.org/dc/elements/1.1/");
            var creatorQName:QName = new QName(dcNamespace, "creator");
            trace(creatorQName.uri); // http://purl.org/dc/elements/1.1/
            trace(creatorQName.localName); // creator
            
            showDescendants(rssXML, creatorQName);
            
            var dateQName:QName = new QName("http://purl.org/dc/elements/1.1/", "date");
            trace(dateQName.uri); // http://purl.org/dc/elements/1.1/
            trace(dateQName.localName); // date
            
            showDescendants(rssXML, dateQName);
        }
        
        public function showDescendants(xmlData:XML, qualifiedName:QName):void
        {
            var decendantList:XMLList = xmlData.descendants(qualifiedName);
            
            for each (var element:XML in decendantList)
            {
                trace(element.name()); // the fully qualified name, 
                                       // like "http://purl.org/dc/elements/1.1/::creator"
                trace(element); // the simple text value of each element, like "Adobe"
            }                
        }
    }
}

posted on 2011-02-24 09:19  jiahuafu  阅读(756)  评论(0编辑  收藏  举报

导航