У меня есть несколько XML-файлов, которые должны соответствовать этому формату:
<root>
<question>What is the answer?</question>
<answer choice="A">Some</answer>
<answer choice="B">Answer</answer>
<answer choice="C">Text</answer>
</root>
Но он приходит из веб-интерфейса (я не могу контролировать вывод) с комментариями и завершаетсявыглядит примерно так:
<root>
<question>What is the answer?</question>
<answer choice="A"><!--some comment
-->
Some
</answer choice="B">
<answer>
<!--some comment
-->
Answer
</answer>
<answer choice="C"><!--another comment
-->
Text</answer>
</root>
Вывод - после удаления комментариев заканчивается так:
What is the answer?
A\t
Some
B\t
Answer
C\t
Text
Теперь янастроить лист xsl для удаления комментариев с помощью:
<xsl:template match="comment()"/>
и некоторых других приложений-шаблонов удостоверений.
Я бы использовал normalize-space (), но он удаляет новые строки, которые я хочу из текста ответа.То, что я ищу, - это способ удаления только «пустых» или предшествующих и заканчивающихся «лишних» новых строк.Есть ли хороший способ сделать это?
Также обратите внимание: окончательный вывод - Adobe Indesign, использующий XSLT 1.0.
[Правка - XSL ниже].
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*" />
<xsl:template match = "@*|node()|processing-instruction()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@*|node()|processing-instruction()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="comment()"/>
<xsl:template match="//answer"><xsl:value-of select="@choice"/>
<xsl:text>	</xsl:text><xsl:call-template name="identity"/>
</xsl:template>
<xsl:template match="//question">
<xsl:text>00	</xsl:text><xsl:call-template name="identity"/>
</xsl:template>
</xsl:stylesheet>