l xml
https://lxml.de/xpathxslt.html
l xml позволит вам преобразовывать XML документы с использованием XSLT. По какой-то причине XSLT игнорируется, и вместо этого используются объекты программирования методом грубой силы. Тем не менее, я предпочитаю использовать XLST при обработке и преобразовании XML данных.
Я настоятельно рекомендую изучать XSLT и использовать его регулярно, если вам необходимо обрабатывать XML данных ежедневно.
XLST для преобразования вашего XML документа: packet.xsl
Переменные используются для разделителя и конца строки (EOL) для упрощения модификации.
Шаблоны для строки заголовка и поля используются для разрешения перестановки или добавления новых полей при необходимости.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" media-type="string" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="delimiter" select="'	'"/>
<xsl:variable name="EOL" select="'
'"/>
<xsl:template match="/pdml/packet/proto">
<xsl:call-template name="header-row"/>
<xsl:apply-templates match="field"/>
</xsl:template>
<xsl:template match="field">
<xsl:value-of select="@name"/>
<xsl:value-of select="$delimiter"/>
<xsl:value-of select="@size"/>
<xsl:value-of select="$delimiter"/>
<xsl:value-of select="@value"/>
<xsl:value-of select="$EOL"/>
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template name="header-row">
<xsl:element name="row">
<xsl:text>field</xsl:text>
<xsl:value-of select="$delimiter"/>
<xsl:text>size</xsl:text>
<xsl:value-of select="$delimiter"/>
<xsl:text>value</xsl:text>
<xsl:value-of select="$EOL"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Пример Python Код преобразования XML / XSLT
Используйте сценарий python, предоставленный @ Дэниел Хейли Я только что назвал свой файл test.py
Выполнить XSLT с XML input
- XSLT = packet.xsl
- XML = package. xml
Предполагается, что ваш пакет. xml является правильно сформированным XML документом, а не неполным документом.
./test.py
Вывод с разделителями табуляции.
field size value
frame.cap_len 0
frame.marked 0
frame.cap_len 0
frame.marked 0
caplen 66 42
timestamp 66 1584945934.045301000