REGEX - Нахождение указанного c XML тега и удаление между указанными c точками - PullRequest
0 голосов
/ 26 марта 2020

My xml выглядит следующим образом:

<example>
<Test_example>Author%5773637864827/Testing-75873874hdueu47.jpg</Test_example>
<Test_example>Auth0r%5773637864827/Testing245-75873874hdu6543u47.ts</Test_example>

Этот XML имеет 100 строк, и меня интересует тег "<Test_example>". В этом теге я хочу удалить все, пока он не увидит /, а когда он увидит -, удалит все, пока не увидит полную остановку.

Конечный результат должен быть

<Test_example>Testing.jpg</Test_example>
<Test_example>Testing245.ts</Test_example>

Я новичок и хотел бы помочь с этим. Я думаю, может быть, регулярное выражение является лучшим методом?

1 Ответ

1 голос
/ 26 марта 2020

Рассмотрим XSLT , специализированный язык, предназначенный для преобразования XML файлов с использованием его функций substring-before и substring-after. Сторонний модуль Python, lxml, может запускать сценарии XSLT 1.0. А поскольку XSLT является переносимым, его можно запускать на других языках или исполняемых файлах за пределами Python:

XSLT (сохранить как файл .xsl, спец. xml файл)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" encoding="UTF-8"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="Test_example">
    <xsl:copy>
      <xsl:value-of select="concat(substring-before(substring-after(., '/'), '-'), 
                                   '.',
                                   substring-after(., '.'))"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

Python

import lxml.etree as et

xml = et.parse('Input.xml')
xsl = et.parse('Script.xsl')

transformer = et.XSLT(xsl)
new_xml = transformer(xml)

# PRINT TO CONSOLE
print(new_xml)

# SAVE TO FILE
with open('Output.xml', 'wb') as f:
   f.write(new_xml)

Выход

<?xml version="1.0" encoding="UTF-8"?>
<example>
   <Test_example>Testing.jpg</Test_example>
   <Test_example>Testing245.ts</Test_example>
</example>

Python Демо

XSLT Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...