У меня есть следующий XML.Получить текст на основе следующего брата
<?xml version="1.0" encoding="UTF-8"?>
<main.line>
<main>
<name>Mohamad</name>
<job.title prefix="no">B</job.title>
</main>
<main>
<name>David</name>
<job.title prefix="no">B</job.title>
</main>
<main>
<name>Hashim</name>
<job.title prefix="no">B</job.title>
</main>
<main>
<name>Anthony</name>
<job.title prefix="no">C</job.title>
</main>
</main.line>
Здесь я пытаюсь напечатать имя и job.title ниже.
Если job.title
это же и есть больше чем два аналогичных происшествия, имя должно быть печать с comma
и фамилия должны быть напечатаны с and
вместе с job.title
сцепленного с A
при запуске. (Это немного запутанный, но мой результат ниже сделает это ясно).
Если есть два случая, то он должен быть напечатан с and
но не comma
Если нет такого случая, то имя должно быть напечатано непосредственно вместе с job.title
.
Желаемый выход такой, как показано ниже.
Mohamad, David and Hashim BA, Anthony C
XSLT Я пробовал, как показано ниже.
<xsl:template match="main.line">
<xsl:for-each select="main ">
<xsl:choose>
<xsl:when test="./job.title=following-sibling::main/job.title">
<xsl:choose>
<xsl:when test="./job.title='A' or 'B' or 'C' or 'D' or 'E'">
<xsl:value-of select="./name"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="following-sibling::main[1]/name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="./job.title"/>
<xsl:text>A</xsl:text>
<xsl:text> </xsl:text>
</xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="not(position() = last()) and fn:not(fn:position()=1)">
<xsl:text>, </xsl:text>
</xsl:when>
<xsl:when test="position()=last() and fn:not(fn:position()=1)">
<xsl:text> and </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:value-of select="name"/>
<xsl:text> </xsl:text>
<xsl:value-of select="job.title"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
Но выход, что я получаю в настоящее время является
Mohamad, David BA David, Hashim BA , Hashim B and Anthony C.
пожалуйста, дайте мне знать, откуда я пойти не так, и как я могу получить желаемый результат.
Благодаря
Привет, Мартин, это здорово, работал как шарм. Просто быстрый вопрос, если у меня есть несколько 'C', это должно быть показано как' BC', можно ли изменить выше добавление дополнительного предложения 'if', или я должен использовать' select'? – user3872094
Должно быть возможно добавить предложение 'if'. –
Спасибо Мартин – user3872094