Как получить точку маркера Черный круглый круг вместо HTML-кода, используя XSLT - PullRequest
0 голосов
/ 15 марта 2019

У меня есть простой xslt, который преобразует xml в xsl-fo, но когда генерируется мой xml, он генерирует маркеры в

•

, когда я использую свое преобразование для преобразования в xsl-fo и передачичто для того, чтобы отобразить pdf, он не распознает html-код для маркера маркера. Я хотел бы добавить какое-то условие в мой XSLT, чтобы изменить его на точку с полным черным кругом маркера для любого предложения, пожалуйста

 <?xml version="1.0"?>
 <xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/doc">
<Generic><xsl:apply-templates /></Generic>
</xsl:template>

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

<xsl:template match="&#149;">
<xsl:copy>
  <xsl:apply-templates select="•" />
  <xsl:apply-templates />
 </xsl:copy>
</xsl:template>
</xsl:transform>

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Не видя ваш ввод XML и ожидаемый вывод, мы можем только догадываться.Попробуйте, возможно:

XSLT 1.0

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

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

<xsl:template match="/doc">
    <Generic>
        <xsl:apply-templates />
    </Generic>
</xsl:template>

<xsl:template match="text()">
    <xsl:value-of select="translate(., '&#149;', '&#8226;')" />
</xsl:template>

</xsl:stylesheet>

Это заменит все вхождения управляющего символа MESSAGE WAITING (•) на символ BULLET (•).

0 голосов
/ 22 марта 2019

Ваш источник в кодировке Windows-1252 (или аналогичной кодовой странице Windows). См., Например, https://superuser.com/questions/1164809/whats-is-the-different-beween-western-european-windows-1252-and-ansi-encoding#1164814 и https://en.wikipedia.org/wiki/Windows-1252, к которым оно относится.

Вам не понадобятся шаблон text() и translate(), если вы сможете выполнить одно из следующих действий:

  • Генерация XML в UTF-8 (или UTF-16) вместо Windows-1252
  • Создайте или измените объявление XML в начале документа, чтобы оно идентифицировало кодировку как Windows-1252 (и используйте процессор XML, который понимает Windows-1252)
  • Используйте процессор XSLT, такой как xsltproc, который позволяет указать кодировку входного документа
  • Преобразование XML-файла Windows-1252 в UTF-8 с использованием iconv (https://en.wikipedia.org/wiki/Iconv) или аналогичного (и последующее преобразование, удаление или изменение объявления XML, если оно фактически идентифицирует кодировку как Windows-1252)
...