2012-04-09 5 views
2

Ich habe eine XML-Datei.Wie kann ich Werte von bestimmten Tags aus einer XML-Datei in eine HTML-Seite extrahieren?

<key>457</key> 
    <dict> 
     <key>Track ID</key><integer>457</integer> 
     <key>Name</key><string>Love me do</string> 
     <key>Artist</key><string>The Beatles</string> 
     <key>Album Artist</key><string>The Beatles</string> 
     <key>Composer</key><string>John Lennon/Paul McCartney</string> 
     <key>Album</key><string>The Beatles No.1</string> 
     <key>Genre</key><string>Varies</string> 
     <key>Kind</key><string>AAC audio file</string> 
</dict> 

ich für diese Zwecke eine Menge der Datei entfernt haben (dies ist ein Lied, und es gibt etwa 20-30 weitere Zeilen XML pro Lied). Was ich tun möchte ist, die 'Artist'-Saite aus jedem Lied zu extrahieren, und dann alle wiederholten Saiten zu entfernen, und dann diese aufzunehmen und in eine HTML-Datei auszugeben; vorzugsweise auf eine Art und Weise, die automatisch autorefesiert, wenn eine neue Version der .xml gefunden wird, so dass eine aktualisierte Datei erhalten bleibt, aber wenn dies zu kompliziert ist, ist das in Ordnung.

Ich habe nach Wegen gesucht, es mit jQuery zu machen, und ich hatte PHP vorgeschlagen, aber ich bin mir nicht sicher, welches ist das bessere/sauberere; und ich bin mir nicht sicher, wie ich es in beiden Fällen machen würde.

Vielen Dank,

Henry.

Antwort

1

Was genau versuchen Sie zu erreichen? Wenn Sie HTML-Dateien benötigen, die in regelmäßigen Abständen basierend auf den XML-Dateien neu generiert werden, sollten Sie wahrscheinlich ein Programm schreiben (z. B. können Sie mit der BeautifulSoup Python-Bibliothek XML/HTML-Dateien ganz einfach analysieren) und jedes Mal ausführen müssen die HTML-Dateien aktualisieren (Sie können auch einen Cron-Job dafür einrichten).

Wenn Sie die Daten aus XML im laufenden Betrieb abrufen müssen, können Sie eine JavaScript-Bibliothek verwenden und das XML aus einer XML-Datei laden und dann dynamisch zur Seite hinzufügen.

Zum Beispiel wird dieses Python-Programm eine XML-Datei (file.xml) analysieren und eine HTML-Datei (song_information.html) erstellen, die Daten aus der XML-Datei enthält.

from BeautifulSoup import BeautifulStoneSoup 

f = open("file.xml") 
soup = BeautifulStoneSoup(f.read()) 
f.close() 

html = """<!DOCTYPE html> 
<html> 
<head> 
<title>Song information</title> 
</head> 
<body> 
""" 

for key in soup.dict.findAll('key'): 
    html += "<h1>%s</h1>\n" % key.contents[0] 
    html += "<p>%s</p>\n" % key.nextSibling.contents[0] 

html += """</body> 
</html> 
""" 

f = open("song_information.html", "w") 
f.write(html) 
f.close() 

Es wird das folgende HTML in die song_information.html Datei schreiben:

<!DOCTYPE html> 
<html> 
<head> 
<title>Song information</title> 
</head> 
<body> 
<h1>Track ID</h1> 
<p>457</p> 
<h1>Name</h1> 
<p>Love me do</p> 
<h1>Artist</h1> 
<p>The Beatles</p> 
<h1>Album Artist</h1> 
<p>The Beatles</p> 
<h1>Composer</h1> 
<p>John Lennon/Paul McCartney</p> 
<h1>Album</h1> 
<p>The Beatles No.1</p> 
<h1>Genre</h1> 
<p>Varies</p> 
<h1>Kind</h1> 
<p>AAC audio file</p> 
</body> 
</html> 

Natürlich ist dies vereinfacht. Wenn Sie Unicode-Unterstützung implementieren müssen, sollten Sie es wie folgt bearbeiten:

from BeautifulSoup import BeautifulStoneSoup 
import codecs 

f = codecs.open("file.xml", "r", "utf-8") 
soup = BeautifulStoneSoup(f.read()) 
f.close() 

html = """<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Song information</title> 
</head> 
<body> 
""" 

for key in soup.dict.findAll('key'): 
    html += "<h1>%s</h1>\n" % key.contents[0] 
    html += "<p>%s</p>\n" % key.nextSibling.contents[0] 

html += """</body> 
</html> 
""" 

f = codecs.open("song_information.html", "w", "utf-8") 
f.write(html) 
f.close() 

Außerdem werden Sie wahrscheinlich brauchen komplexere HTML zu erzeugen, so dass Sie wollen wahrscheinlich einige Template-Systeme wie Jinja2 versuchen.

+0

Eine HTML-Datei, die regelmäßig neu generiert wird; das Vorherige. Ich schaue mir das an - vielen Dank! – Direthoughts

1

Ich würde dies in PHP tun: setze dein XML in eine Zeichenkette, dann (weil du nur das verwenden willst), codiere es in JSON, dekodiere es in ein assoziatives Array und führe dann eine foreach-Schleife aus Künstler, und schließlich entfernen Sie die Duplikate und speichern Sie es dann als HTML. Anschließend können Sie einen Cron-Job hinzufügen, um diesen regelmäßig auszuführen und den HTML-Code zu generieren. Führen Sie diesen Code aus und verknüpfen Sie ihn mit den Ergebnissen, die er ausgegeben hat.

Sobald ich die Struktur des Arrays kennen, die produziert wird, kann ich den Code vervollständigen. Aber es wäre in etwa so aussehen:

foreach($array['dict']['artist'] as $artist) { 
    $artists[] = $artist; 
} 

// Now $artists holds an array of the artists 

$arists = array_unique($artists); 

// Now there are no duplicates 

foreach($artists as $artist) { 
    $output .= '<p>',$artist,'</p>'; 
} 

// Now each artist is put in it's own paragraph. 

// Either output the output 
echo $output; 

// Or save it to a file (in this case, 'artists.html') 

$fh = fopen('artists.html', 'w') or die("Can't open file"); 
fwrite($fh, $output); 
fclose($fh); 

Dies gilt nicht vollständig als die Linie in der ersten foreach Schleife bekommen arbeiten braucht ein bisschen Zwicken, aber dies ist ein Ausgangspunkt.

Verwandte Themen