Проблемы с синтаксическим анализом XML в Actionscript 3.0 - PullRequest
0 голосов
/ 14 марта 2011

У меня проблема при разборе следующего 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

Я пробовал разные парсинги, но безуспешно из-за двоеточия.

Большое спасибо за любые предложения!

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Вам необходимо создать объекты пространства имен для всех пространств имен, к которым вы хотите получить доступ, и добавить к своим свойствам 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());
  }
}
1 голос
/ 14 марта 2011

Вы также можете использовать 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
...