ArkML/Реализации кодеков
Преобразование в HTML упрощает отображение ArkML в средствах визуализации на основе HTML, таких как встроенный Webkit или MozEmbed.
Преобразование в HTML
Преобразование в HTML упрощает отображение ArkML в средствах визуализации на основе HTML, таких как встроенный Webkit или MozEmbed.
XSLT 1.0
XSLT является универсальным языком преобразования XML, и его следует использовать во всех средах программирования в пользу процедурных преобразований, специфичных для языка.
Для этого преобразования не требуется никаких функций XSLT 2.0.
Примечание. XSLT работает только с XML. Вы должны сначала преобразовать SGML в XML - что, как правило, является простым процессом. Для сред командной строки см. утилиту "osx".
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="RichColor">
<span>
<xsl:apply-templates select="@* | node()"/>
</span>
</xsl:template>
<xsl:template match="RichColor/@Color">
<xsl:attribute name="style">
<xsl:value-of select="concat(
'color: rgba(',
round(substring-before(., ',') * 255),
', ',
round(substring-before(substring-after(., ','), ',') * 255),
', ',
round(substring-before(substring-after(substring-after(., ','), ','), ',') * 255),
', ',
substring-after(substring-after(substring-after(., ','), ','), ',') * 1,
');'
)"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="text()" name="br">
<xsl:param name="str" select="."/>
<xsl:choose>
<xsl:when test="not(contains($str, '
'))">
<xsl:copy-of select="$str"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($str, '
')"/>
<br />
<xsl:call-template name="br">
<xsl:with-param name="str" select="substring-after($str, '
')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Python 3 с использованием LXML и BeautifulSoup
Вам понадобятся два пакета PyPI: lxml и beautifulsoup4.
Сначала нам нужно создать преобразователь XSLT, чтобы не создавать его каждый раз, когда мы анализируем ArkML. «xsltstr» — это строка (или байты), содержащая указанный выше код XSLT.
from lxml import etree transform = etree.XSLT(etree.fromstring(xsltstr))
Теперь мы анализируем данные ArkML. "arkmlstr" - это строка (или байты), содержащая входные данные ArkML. Входные данные должны быть обернуты в элементы span, поскольку XSLT работает только с XML-документами (API, которые позволяют применять преобразования XSLT к фрагментам XML, тайно добавляют документ nothing вокруг фрагмента, но в python это делается явно). Выходные данные ("htmlspan") будут представлять собой объект LXML, содержащий элемент HTML span. Этот код обычно выполняет синтаксический анализ SGML, автоматически выбирая любой доступный анализатор SGML, установленный в установке Python.
from lxml.html import soupparser htmlspan = transform(soupparser.fromstring(b"<span>" + arkmlstr.replace(b'&', b'&') + b"</span>", features="xml")[0])
А затем вы можете преобразовать его обратно в байт/строку:
print(b''.join([etree.tostring(c) for c in htmlspan.getroot().iterdescendants()]))