Я пытаюсь проанализировать вариант xliff (XML) из программного обеспечения для перевода SDL Trados, которое содержит переводы, и файл "sdlxliff", который я анализирую, выглядит следующим образом (несколько упрощенный и "предварительно проверенный").
Обрабатываемый файл XML / XLIFF ("sample.sdlxliff"):
<?xml version="1.0" encoding="utf-8"?><xliff xmlns:sdl="http://sdl.com/FileTypes/SdlXliff/1.0" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2" sdl:version="1.0"><file original="\\TRADOS_SERVER\Trados\2017\Doc_Helps\en-US\import\Test.xml" datatype="x-sdlfilterframework2" source-language="en-US" target-language="hr-HR"><header><sniff-info><detected-encoding detection-level="Certain" encoding="utf-8"/><detected-source-lang detection-level="Guess" lang="en-US"/><props><value key="xmlDeclaration">true</value><value key="standalone">yes</value><value key="HasUtf8Bom">false</value><value key="IsFragment">false</value></props></sniff-info></header>
<body>
<trans-unit id="a1f4768e-a026-46c2-b65d-599d2108d176">
<source>
<g id="461">Add or edit text: </g>Just begin typing. The blinking insertion point indicates where your text starts. To edit text, <g id="462">select the text</g>, then type. Use the controls in the Format <g id="463"> <g id="464"/></g> sidebar on the right.
</source>
<seg-source>
<g id="461">
<mrk mtype="seg" mid="182">Add or edit text:</mrk> </g>
<mrk mtype="seg" mid="183">Just begin typing.</mrk>
<mrk mtype="seg" mid="184">The blinking insertion point indicates where your text starts.</mrk>
<mrk mtype="seg" mid="185">To edit text, <g id="462">select the text</g>, then type.</mrk>
<mrk mtype="seg" mid="186">Use the controls in the Format <g id="463"><g id="464"/></g> sidebar on the right.</mrk>
</seg-source>
<target>
<g id="461">
<mrk mtype="seg" mid="182">Dodajte ili uredite tekst:</mrk> </g>
<mrk mtype="seg" mid="183">Samo počnite tipkati.</mrk>
<mrk mtype="seg" mid="184">Trepereća točka umetanja pokazuje gdje počinje vaš tekst.</mrk>
<mrk mtype="seg" mid="185">Za uređivanje teksta <g id="462">odaberite tekst</g>, zatim unesite tekst.</mrk>
<mrk mtype="seg" mid="186">Upotrijebite kontrole u rubnom stupcu Formatiraj <g id="463"><g id="464"/></g> s desne strane.</mrk>
</target>
<blahblahblah></blahblahblah>
</trans-unit>
<trans-unit id="7f7ede5e-75b9-403a-b1c6-43f654ea8245">
<source>
<g id="492"><g id="493">The toolbar with buttons.</g></g>
</source>
<seg-source>
<g id="492">
<g id="493">
<mrk mtype="seg" mid="199">The toolbar with buttons.</mrk></g></g>
</seg-source>
<target>
<g id="492">
<g id="493">
<mrk mtype="seg" mid="199">Alatna traka sa tipkama.</mrk></g></g>
</target>
<blahblahblah></blahblahblah>
</trans-unit>
</body>
</file></xliff>
Итак, файл XML / XLIFF имеет части "seg-source" и "target", которые меня интересуют и который я хочу извлечь, а затем распечатать в обычный текстовый файл с разделителями табуляции или что-то еще.
Однако у меня возникли проблемы со встроенными тегами - как в этой строке:
<mrk mtype="seg" mid="185">To edit text, <g id="462">select the text</g>, then type.</mrk>
-> где я получаю только часть строки перед первым встроенным тегом '<g id="xxx">'
: (
Вместо " Чтобы редактировать текст, выделите текст, затем введите."Я получаю только" Для редактирования текста,".
Python код, который я пробовал:
# parsesdlxliff-test.py:
from lxml import etree
tree = etree.parse("sample.sdlxliff")
root = tree.getroot()
for element in root:
pass # not important
# now the children
for all_tags in element.findall('.//'):
if 'mrk' in all_tags.tag:
attrs = all_tags.attrib
numb = attrs.get("mid")
# remove all internal tags within 'mrk', leave only clean string/text? - how?
print(numb, all_tags.text)
Результат, который я получаю с этим код:
182 Add or edit text:
183 Just begin typing.
184 The blinking insertion point indicates where your text starts.
185 To edit text,
186 Use the controls in the Format
182 Dodajte ili uredite tekst:
183 Samo počnite tipkati.
184 Trepereća točka umetanja pokazuje gdje počinje vaš tekst.
185 Za uređivanje teksta
186 Upotrijebite kontrole u rubnom stupcu Formatiraj
199 The toolbar with buttons.
199 Alatna traka sa tipkama.
Как видно из результирующих строк № 185 и 186 («средние» цифры), после текста отсутствует текст Встроенный тег st (как в «seg-source», так и в «target»).
В конечном итоге, я хочу получить что-то вроде этого (только иллюстрация):
Add or edit text: <TAB> Dodajte ili uredite tekst:
To edit text, select the text, then type. <TAB> Za uređivanje teksta odaberite tekst, zatim unesite tekst.
Use the controls in the Format sidebar on the right. <TAB> Upotrijebite kontrole u rubnom stupcu Formatiraj s desne strane.
Т.е. разделенный табуляцией источник-цель предложение пары.
Я могу связать их позже, используя средние числа, но только после того, как мне удастся получить целые строки (как-то избавиться от внутренних тегов? ) ...
Короче говоря, как получить / извлечь целые строки, включая части после любых внутренних тегов '<gxxx>'
или '</g>'
?