У меня есть какой-то XML, который я импортирую в InDesign. Проблема возникает с многоуровневыми маркированными списками, которые неправильно форматируются в документе.
Проблема проще визуализировать в InDesign. На двух скриншотах показан один и тот же импортированный XML в разных представлениях. Выделенные красные области - это те части, которые я хочу удалить с помощью XSLT (вызванные нежелательным Unicode 

).
Вид редактора историй InDesign
Вид компоновки InDesign
Вот импортированный XML:
<?xml version="1.0" encoding="UTF-8"?>
<STORY StoryCode="454789" DatePublished="18/06/2019 07:50">
<Story_text>
<!--?xml version="1.0" encoding="UTF-8" standalone="yes"?-->
<h2>List 1</h2>
<ul>
<li>
level 1
<ul>
<li>level 2</li>
<li>level 2</li>
</ul>
</li>
<li>level 1</li>
<li>
level 1
<ul>
<li>
level 2
<ul>
<li>level 3</li>
</ul>
</li>
</ul>
</li>
<li>level 1</li>
<li>level 1</li>
</ul>
</Story_text>
</STORY>
А вот мой нынешний XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no" />
<!-- #1 copy entire template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- #2 assigns each level of bullet to li1, li2, li3 etc. -->
<xsl:template match="ul/li">
<xsl:element name="li{count(ancestor::li) + 1}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<!-- #3 insert paragraph separator after ul elements with li parent -->
<xsl:template match="li/ul">
<xsl:copy><xsl:text>
</xsl:text><xsl:apply-templates/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
Шаблон № 2 необходим для того, чтобы каждый уровень маркера можно было сопоставить с определенным стилем абзаца InDesign (например, со стилем маркера 1, стилем маркера 2 и т. Д.). Привет пользователю Тим С за помощь.
Шаблон № 3 необходим, чтобы исправить причуду, когда первая пуля из списка уровня 2 или выше не появляется в новой строке. Поскольку InDesign допускает применение только одного стиля абзаца к новой строке, без этого шаблона маркеры разных уровней появляются в одной строке и отображаются в одном стиле абзаца ( изображение результата InDesign без шаблона # 3 ).
Я пробовал следующий XSLT:
<xsl:template match="ul/li/ul/text()">
<xsl:value-of select="translate(., '
', '')" />
<xsl:apply-templates/>
</xsl:template>
[Это сближается, но в конечном итоге терпит неудачу, если есть несколько последовательных пуль одного и того же уровня ( см. Изображение редактора историй InDesign ). Я думаю, потому что все разделители абзацев, содержащиеся в <ul> ... </ul>
, удаляются, а не те, которые я хочу удалить.]
И
<xsl:template match="ul/li/ul/text()">
<xsl:value-of select="substring(., 1, string-length(.)-X)" />
</xsl:template>
[Если X ≤2, то ничего не меняется, когда X> 2, результат такой же, как и в предыдущем методе]
Я думаю, что я хочу достичь, если <ul> ... </ul>
(хотя бы с одним родителем <ul>
) содержит ≥2 

, удалить окончательный 

, но я не могу понять как перевести это в XSLT.
Я бы очень признателен за любую помощь / указатели в правильном направлении.
EDIT
Я понимаю, что приведенный выше пример XML несколько вводит в заблуждение с точки зрения разрывов строк, поэтому здесь приведено более точное описание (включая разделитель параграфа 

):
<?xml version="1.0" encoding="utf-8" standalone="yes"?><STORY StoryCode="454789" DatePublished="18/06/2019 07:50"><Headline>Bullet XML test SO</Headline>

<Standfirst><!--?xml version="1.0" encoding="UTF-8" standalone="yes"?--><p>placeholder</p></Standfirst>

<Story_text><!--?xml version="1.0" encoding="UTF-8" standalone="yes"?--><h2>List 1</h2>

<ul><li>level 1<ul><li>level 2</li>

<li>level 2</li>

</ul></li>

<li>level 1</li>

<li>level 1<ul><li>level 2<ul><li>level 3</li>

</ul></li>

</ul></li>

<li>level 1</li>

<li>level 1</li>

</ul></Story_text>

</STORY>
Вот XML после преобразования с моим текущим XSLT, я отметил разделители абзацев, которые я хочу удалить.
<?xml version="1.0" encoding="utf-8" standalone="yes"?><STORY StoryCode="454789" DatePublished="18/06/2019 07:50"><Headline>Bullet XML test SO</Headline>

<Standfirst><!--?xml version="1.0" encoding="UTF-8" standalone="yes"?--><p>placeholder</p></Standfirst>

<Story_text><!--?xml version="1.0" encoding="UTF-8" standalone="yes"?--><h2>List 1</h2>

<ul><li1>level 1<ul>

<li2>level 2</li2>

<li2>level 2</li2>

</ul></li1>
 [TO DELETE]
<li1>level 1</li1>

<li1>level 1<ul>

<li2>level 2<ul>

<li3>level 3</li3>

</ul></li2>
 [TO DELETE]
</ul></li1>
 [TO DELETE]
<li1>level 1</li1>

<li1>level 1</li1>

</ul></Story_text>

</STORY>