Измените добавление префикса пространства имен ElementTree в Python

Все ответы до сих пор довольно испорчены - они или включают добавление class="noprint" ко всему или испортят display в #printable.

я думаю, что лучшее решение состояло бы в том, чтобы создать обертку вокруг непечатаемого материала:

<head>
    <style type="text/css">

    #printable { display: none; }

    @media print
    {
        #non-printable { display: none; }
        #printable { display: block; }
    }
    </style>
</head>
<body>
    <div id="non-printable">
        Your normal page contents
    </div>

    <div id="printable">
        Printer version
    </div>
</body>

, Конечно, это не прекрасно, поскольку это вовлекает перемещающиеся вещи в Ваш HTML немного...

18
задан Gabriel Hurley 8 August 2009 в 20:56
поделиться

2 ответа

Вам не нужно специально использовать iterparse . Вместо этого следующий сценарий:

from cStringIO import StringIO
import xml.etree.ElementTree as ET

NS_MAP = {
    'http://www.red-dove.com/ns/abc' : 'rdc',
    'http://www.adobe.com/2006/mxml' : 'mx',
    'http://www.red-dove.com/ns/def' : 'oth',
}

DATA = '''<?xml version="1.0" encoding="utf-8"?>
<rdc:container xmlns:mx="http://www.adobe.com/2006/mxml"
                 xmlns:rdc="http://www.red-dove.com/ns/abc"
                 xmlns:oth="http://www.red-dove.com/ns/def">
  <mx:Style>
    <oth:style1/>
  </mx:Style>
  <mx:Style>
    <oth:style2/>
  </mx:Style>
  <mx:Style>
    <oth:style3/>
  </mx:Style>
</rdc:container>'''

tree = ET.parse(StringIO(DATA))
some_node = tree.getroot().getchildren()[1]
print ET.fixtag(some_node.tag, NS_MAP)
some_node = some_node.getchildren()[0]
print ET.fixtag(some_node.tag, NS_MAP)

производит

('mx:Style', None)
('oth:style2', None)

, который показывает, как вы можете получить доступ к полным именам тегов отдельных узлов в анализируемом дереве. Вы сможете адаптировать это к своим конкретным потребностям.

6
ответ дан 30 November 2019 в 09:36
поделиться

xml.etree.ElementTree, похоже, не имеет фиксированного тега, ну, ну, не по документации. Однако я просмотрел некоторый исходный код для исправления тега, и вы его видите:

import xml.etree.ElementTree as ET

for event, elem in ET.iterparse(inFile, events=("start", "end")):
    namespace, looktag = string.split(elem.tag[1:], "}", 1)

У вас есть строка тега в поисковом теге, подходящая для поиска. Пространство имен находится в пространстве имен.

2
ответ дан 30 November 2019 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: