Замените символ вертикальной черты в XML новой строкой, используя XSL

Мой тестовый фрагмент кода XSLT преобразует некоторые данные из XML в PDF.

Камень преткновения, с которым я сталкиваюсь сейчас, заключается в том, что мне нужно прочитать строку внутри XML и

заменить трубу '||' символы с новой строки (на выходе pdf)

<Step>
     <TITLE>Measurement Result</TITLE>
     <MEAS OBJECT="REMARKS">
       <TITLE>Remarks</TITLE>
          <VALUE>Measurement completed.
             ||Findings: The battery is weak and should be replaced as soon as possible.
             || &gt;&gt; Contact helpline for more details
          </VALUE>
     </MEAS>
</Step>

Как мне вызвать шаблон, который мог бы читать символы этого канала и, наконец, отображать новую строку в выходном PDF-файле.

Заранее спасибо ВАТСАГ


person this-Me    schedule 02.11.2012    source источник


Ответы (1)


Поскольку вам нужно работать с текстовым узлом, используйте «substring-before» для разделения строки. Этот пример работает:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="*">
        <xsl:apply-templates select="*"/>
    </xsl:template>
    <xsl:template match="VALUE">
        <xsl:call-template name="replace">
            <xsl:with-param name="txt">
                <xsl:value-of select="."/>
            </xsl:with-param>
        </xsl:call-template>
    </xsl:template>
    <xsl:template name="replace">
        <xsl:param name="txt"/>
        <xsl:if test="not(contains($txt,'||'))">
            <xsl:value-of select="$txt"/>
        </xsl:if>
        <xsl:if test="contains($txt,'||')">
            <xsl:value-of select="substring-before($txt,'||')"/>
            <hr/>
            <xsl:call-template name="replace">
                <xsl:with-param name="txt">
                    <xsl:value-of select="substring-after($txt,'||')"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

Он не создает правильно сформированный xml, но дает идею. Я использовал ‹hr/›, чтобы показать новую строку. Вставьте сюда соответствующий код.
Что происходит? Когда сценарий XSLT приходит к элементу, содержащему разделяемый текст, он вызывает именованный шаблон и отправляет текст в качестве параметра.
Именованный шаблон проверяет, содержит ли параметр маркер разделения. В противном случае текст используется без изменений. Если это так, текст перед маркером разделения используется, а текст после снова передается в именованный шаблон (рекурсивно).

person Andreas    schedule 02.11.2012
comment
Я приложил некоторые усилия для ответа, который работает с вашими данными, поэтому вы должны либо принять, либо сказать, что, по вашему мнению, отсутствует. Если я признаю, что он не создает правильно сформированный xml, это потому, что я не обернул вокруг него XML-документ. Просто подходит к одному. - person Andreas; 15.11.2012