Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Python: DOM: getElementById

trilog [10.11.2008 18:48:32]

#

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?

trilog [11.11.2008 14:00:18]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta