【问题标题】:XML parsing issues in Actionscript 3.0Actionscript 3.0 中的 XML 解析问题
【发布时间】:2011-03-14 00:18:22
【问题描述】:

我在解析以下 xml 时遇到问题:

<x:xmpmeta x:xmptk="Adobe XMP Core 5.0.0-ac001" xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="" xmp:rating="4" xmp:title="random" xmp:land="stuff" 
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"   xmlns:dc="http://purl.org/dc/elements/1.1/"/>
 </rdf:RDF>
</x:xmpmeta>

我想要一个 xmp 的描述列表和它的值列表:

-rating -title -land

和

-4 -random -stuff

我尝试了不同的解析,但由于冒号而没有成功。

非常感谢您的任何建议!

【问题讨论】:

    标签: xml actionscript-3 parsing xmp


    【解决方案1】:

    您需要为要访问的所有命名空间创建命名空间对象,并为您的 E4X 属性添加适当的命名空间前缀。这是一个如何读取值和迭代属性的示例:

    var xmlString:String =
      '<x:xmpmeta x:xmptk="Adobe XMP Core 5.0.0-ac001" xmlns:x="adobe:ns:meta/">\
       <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\
        <rdf:Description rdf:about="" xmp:rating="4" xmp:title="random" xmp:land="stuff" \
          xmlns:xmp="http://ns.adobe.com/xap/1.0/"   xmlns:dc="http://purl.org/dc/elements/1.1/"/>\
       </rdf:RDF>\
      </x:xmpmeta>';
    var rdf:Namespace = new Namespace('http://www.w3.org/1999/02/22-rdf-syntax-ns#');
    var xmp:Namespace = new Namespace('http://ns.adobe.com/xap/1.0/');
    var xml:XML = new XML(xmlString);
    for each (var description:XML in xml.rdf::RDF.rdf::Description) {
      var rating:String = description.@xmp::rating;
      var title:String = description.@xmp::title;
      var land:String = description.@xmp::land;
      trace(rating, title, land);
    
      // iterate over all the attributes
      for each (var attr:XML in description.attributes()) {
        trace(attr.name(), attr.localName());
      }
    }
    

    【讨论】:

      【解决方案2】:

      您也可以使用XMP Library。

      var m:XMPMeta = new XMPMeta(xml);   
      
      for each (var prop:XMPProperty in m)  
      {  
          trace(prop.qname.localName);  
      }  
      
      for each (var value:XMPProperty in m)  
      {
              trace(value);  
      }   
      
      // traces
      rating   
      title  
      land  
      4  
      random  
      stuff
      

      如果您想访问单个属性,您可以使用XMPConst,它提供了所需的大部分命名空间。

      var xmp:Namespace = XMPConst.xmp;
      trace(m.xmp::rating); //etc
      

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 2013-05-27
        • 1970-01-01
        • 2014-02-25
        • 2016-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多