XSLT 1.0: для каждого терминального узла выведите свою цепочку предков в виде csv - PullRequest
1 голос
/ 16 июля 2009

Я пытаюсь получить лучшее от превосходного программного обеспечения Mind Map с открытым исходным кодом FreeMind. В результате разработки карты я получаю файл, который на самом деле представляет собой файл XML с простой структурой:

<node TEXT="0th text i am interested in">
  <node TEXT="1st text i am interested in">
    <node TEXT="2nd text i am interested in">
      <node TEXT="3dh text i am interested in">
        <node TEXT="4th text i am interested in"/>
      </node>
    </node>
.........

Ради простоты я удалил неинтересные (для моего приложения) атрибуты.

Как видите, это простая иерархия сдерживания. Существуют фрагменты кода, используемые для экспорта, но для моих нужд я хотел бы создать csv-подобный текст, где каждый узел без дочерних элементов имеет слева от него всю свою цепочку предков, разделенную запятой, двоеточием или чем-то еще , Я имею в виду, я хотел бы видеть что-то вроде:

0th node; 1st text ; 2nd text; 3dh text; 4th text
... then a new data line

Моя цель - иметь возможность быстро проверить полный квалифицирующий путь к этому узлу, и это для каждого и только терминальных узлов. Если я смогу получить хотя бы «пунктирное число», я буду более чем счастлив (я имею в виду: 1.2.3.4 ... и т. Д., Отмечая положение вложенности узла; я помню, что в XSLT есть что-то полезное для выполнения это).

Этот XSLT позволил бы мгновенно выгрузить в csv полный квалифицированный список после простой обработки иерархии с мощью интерфейса FreeMind

К сожалению, сейчас я не могу этого сделать, у меня очень плохое владение XSLT. Жаль, XSLT - очень мощный инструмент ... У кого-нибудь есть подсказка для меня?

1 Ответ

3 голосов
/ 16 июля 2009

<xsl:output method="text" indent="no" encoding="utf-8" />
<xsl:strip-space elements="*" />

<xsl:template match="//node[not(node)]">
    <xsl:for-each select="ancestor::node">
        <xsl:value-of select="@TEXT" />
        <xsl:text> ; </xsl:text>
    </xsl:for-each>
    <xsl:value-of select="@TEXT" />
    <xsl:text>&#10;</xsl:text>
</xsl:template>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...