Olen tässä pitkin iltaa yrittänyt saada tuota getElementById:tä toimimaan. Käytössä on siis Pythonin xml.dom:n minidom.
#!/usr/bin/env python # -*- coding: UTF-8 -*- from xml.dom import minidom xml = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ATTLIST div id ID #IMPLIED> ] > <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi"> <head> <title>testi</title> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/> </head> <body> <div id="wrapper"> <p>foofofofofoofof</p> </div> </body> </html> ''' dom = minidom.parseString(xml) print dom.getElementById('wrapper')
Tulostaa 'None'.
Netistä lueskelin, että tuonne DOCTYPEEN pitää määritellä ATTLIST, noinko se määritellään?
Tämä taas toimii:
#!/usr/bin/env python # -*- coding: UTF-8 -*- from xml.dom import minidom xml = '''<?xml version="1.0"?> <!DOCTYPE testi [ <!ATTLIST elementti id ID #IMPLIED> ]> <elementti id="wrapper"> foofofo </elementti> ''' dom = minidom.parseString(xml) print dom.getElementById('wrapper')
Nähdäkseni tässä on ongelmana tuon wrapperin nappaaminen div:n sisältä. Kuinka siis saan elementin div, jonka id on 'wrapper' ulos?
Vika selvisi osittain.
#!/usr/bin/env python # -*- coding: UTF-8 -*- from xml.dom import minidom xml = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ <!ATTLIST div id ID #IMPLIED> ] > <html> <head> <title>testi</title> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8"/> </head> <body> <div id="wrapper"> <p>foofofofofoofof</p> </div> </body> </html> ''' dom = minidom.parseString(xml) print dom.getElementById('wrapper')
Eli jos poistan tuosta HTML-tagista XHTML:n määrittävän määritteen niin getElementById toimii. Nyt pitäisi keksiä miten saan XHTML-määritteen dokumenttiin mukaan...
EDIT: Nähtävästi XHTML:n namespace (http://www.w3.org/1999/xhtml) rikkoo getElementById:n (ei toiminut edes DOCTYPEn kautta). Jos jollakin on joku ratkaisu tähän niin olisin kiitollinen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.