Я знаю, что вы ищете решение Python, но поскольку XSLT является такой удобной альтернативой и идеально подходит для файла .xml
, я все равно публикую решение XSLT.
Я думаю, этоможет быть легко интегрирован в ваше решение Python.
Так что это необходимый XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:month="http://month.com">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<month:month>
<month name="Jan" />
<month name="Feb" />
<month name="Mar" />
<month name="Apr" />
<month name="May" />
<month name="Jun" />
<month name="Jul" />
<month name="Aug" />
<month name="Sep" />
<month name="Oct" />
<month name="Nov" />
<month name="Dec" />
</month:month>
<xsl:template match="author[position()=1]">
<xsl:value-of select="concat(tei:persName/tei:forename, '. ',tei:persName/tei:surname)" />
</xsl:template>
<xsl:template match="author">
<xsl:value-of select="concat(', ',tei:persName/tei:forename, '. ',tei:persName/tei:surname)" />
</xsl:template>
<xsl:template match="author[last()]">
<xsl:value-of select="concat(' and ',tei:persName/tei:forename, '. ',tei:persName/tei:surname)" />
</xsl:template>
<xsl:template match="/biblStruct">
<xsl:apply-templates select="analytic/author" />
<xsl:variable name="mon" select="number(substring(monogr/imprint/date/@when,6,2))" />
<xsl:value-of select='concat(" '",analytic/title,"'",", ",monogr/title, ", ")' />
<xsl:value-of select="document('')/xsl:stylesheet/month:month/month[$mon]/@name" />
<xsl:value-of select="concat(' ',/xsl:stylesheet/month:month[substring(monogr/imprint/date/@when,5,2)],substring(monogr/imprint/date/@when,1,4))" />
</xsl:template>
</xsl:stylesheet>
Вам не нужно много знать о XSLT, чтобы понять этот код:
Существует три шаблонасоответствующие author
элементы - один соответствует первому совпадению, один соответствует last()
совпадению и один соответствует всем между ними.Они отличаются только обработкой разделителей, таких как ,
и and
.
Последний шаблон обрабатывает весь XML и объединяет выходные данные трех других шаблонов.Он также преобразует числовой номер месяца в строку, ссылаясь на остров данных month:month
.
Вам также следует взглянуть на определенные пространства имен элемента xsl:stylesheet
:
Я надеюсь, чтоЯ убедительно обосновал использование файла XSLT для преобразования.Элемент xsl:output
указывает желаемую цель вывода текста с помощью method="text"
.