lesen und schreiben von xmp in php

17/11/2014 - 01:46 von Gerd Schulz | Report spam
moin,

weiß jemand, weshalb hier das array (ff.) weitgehend leer bleibt?
Das mag mit diesen Zeichen (([^"]*)"'...) zusammenhàngen.
Was bedeuten die? Z.B.: \s*


#########################################################
function get_xmp_array( $xmp_raw ) {
$xmp_arr = array();
foreach ( array(
'Creator Email' =>
'<Iptc4xmpCore:CreatorContactInfo[^>]+?CiEmailWork="([^"]*)"',
// aux
'Owner Name' => '<rdf:Description[^>]+?aux:OwnerName="([^"]*)"',

// xmp
'Creation Date' => '<rdf:Description[^>]+?xmp:CreateDate="([^"]*)"',
'Modification Date' => '<rdf:Description[^>]+?xmp:ModifyDate="([^"]*)"',
'Label' => '<rdf:Description[^>]+?xmp:Label="([^"]*)"',
'Description' => '<rdf:Description[^>]+?xmp:Description="([^"]*)"',
'Rating' => '<rdf:Description[^>]+?xmp:Rating="([^"]*)"', // new ??

// photoshop
'Credit' => '<rdf:Description[^>]+?photoshop:Credit="([^"]*)"',
'Source' => '<rdf:Description[^>]+?photoshop:Source="([^"]*)"',
'Headline' => '<rdf:Description[^>]+?photoshop:Headline="([^"]*)"',
'City' => '<rdf:Description[^>]+?photoshop:City="([^"]*)"',
'State' => '<rdf:Description[^>]+?photoshop:State="([^"]*)"',
'Country' => '<rdf:Description[^>]+?photoshop:Country="([^"]*)"',

// dc
'Title' => '<dc:title>\s*<rdf:Alt>\s*(.*?)\s*<\/rdf:Alt>\s*<\/dc:title>',
'Description' =>
'<dc:description>\s*<rdf:Alt>\s*(.*?)\s*<\/rdf:Alt>\s*<\/dc:description>',
'Rights' =>
'<dc:rights>\s*<rdf:Alt>\s*(.*?)\s*<\/rdf:Alt>\s*<\/dc:rights>', // new
'Creator' =>
'<dc:creator>\s*<rdf:Seq>\s*(.*?)\s*<\/rdf:Seq>\s*<\/dc:creator>',
'Subject' =>
'<dc:subject>\s*<rdf:Bag>\s*(.*?)\s*<\/rdf:Bag>\s*<\/dc:subject>',
'Hierarchical Keywords' =>
'<lr:hierarchicalSubject>\s*<rdf:Bag>\s*(.*?)\s*<\/rdf:Bag>\s*<\/lr:hierarchicalSubject>'
) as $key => $regex ) {

// get a single text string == match == leeres array
$xmp_arr[$key] = preg_match( "/$regex/is", $xmp_raw, $match ) ?
$match[1] : '';

$xmp_arr[$key] = preg_match_all(
"/<rdf:li[^>]*>([^>]*)<\/rdf:li>/is", $xmp_arr[$key], $match ) ?
$match[1] : $xmp_arr[$key];

// hierarchical keywords need to be split into a third dimension
if ( ! empty( $xmp_arr[$key] ) && $key == 'Hierarchical Keywords' ) {
foreach ( $xmp_arr[$key] as $li => $val ) $xmp_arr[$key][$li] =
explode( '|', $val );
unset ( $li, $val );
}
}
return $xmp_arr;
}
// array output
$arr_get_xmp_raw = get_xmp_array(get_xmp_raw( $filepath ));
echo " get_xmp_array: <pre>"; print_r($arr_get_xmp_raw); echo "</pre>";

#########################################################


Array
(
[Creator Email] =>
[Owner Name] =>
[Creation Date] =>
[Modification Date] =>
[Label] =>
[Description] =>
[Rating] =>
[Credit] =>
[Source] =>
[Headline] =>
[City] =>
[State] =>
[Country] =>
[Title] => Array
(
[0] => xmp name name artist
)
...

Das "XML" dazu sieht so aus:
<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='Image::ExifTool 9.69'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

<rdf:Description rdf:about=''
xmlns:Iptc4xmpExt='http://iptc.org/std/Iptc4xmpExt/2008-02-29/'>
<Iptc4xmpExt:LocationShown>
<rdf:Bag>
<rdf:li rdf:parseType='Resource'>
<Iptc4xmpExt:City>Ceeeeeeetiiiiii</Iptc4xmpExt:City>
<Iptc4xmpExt:CountryName>Wassutt
LocationShownCountryName</Iptc4xmpExt:CountryName>
</rdf:li>
</rdf:Bag>
</Iptc4xmpExt:LocationShown>
</rdf:Description>

<rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1/'>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang='x-default'>xmp name name artist</rdf:li>
</rdf:Alt>
</dc:title>
</rdf:Description>
...

#########################################################

Kann man so schon sehen, woran es hakt?

Die Quelle ist hier:
<http://surniaulula.com/2013/04/09/r...in-php>

(das Schreiben kommt dann noch ...)



Grüße,
Gerd
 

Lesen sie die antworten

#1 Stefan+Usenet
17/11/2014 - 09:04 | Warnen spam
On Mon, 17 Nov 2014 01:46:26 Gerd Schulz wrote:
Das mag mit diesen Zeichen (([^"]*)"'...) zusammenhàngen.



Sehr wahrscheinlich.

Was bedeuten die? Z.B.: \s*



Das sind regulaere Ausdruecke, siehe
<http://php.net/manual/en/reference....x.php>.

Konkret bedeutet \s* beispielsweise keine oder beliebig viel Whitespace
(Tab, LF, FF, CR oder Leerzeichen).

Ganz allgemein stellen regulàre Ausdrücke eher eine der unangenehmeren
Möglichkeiten dar, mit XML umzugehen. Je nach Ersteller der Quelldatei
könnte es z.B. durchaus auch vorkommen, dass ein anderer Alias als "rfd"
für den Namespace verwendet wird, und dann geht auf einmal gar nichts mehr.

Servus,
Stefan

http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

In Stefan steckt mehr, als man sich wünscht.
(Sloganizer)

Ähnliche fragen