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.