Токенизируйте строки из 2 элементов и выводите их следующим образом, используя exslt в XSLT 1.0. - PullRequest
0 голосов
/ 17 сентября 2018

Введите:

<name>Simon Jack Alex</name>
<age>21 23 22</age>

Желаемый вывод:

<details>
    <name="Simon">21</name>
    <name="Jack">23</name>
    <name="Alex">22</name>
</details>

Код должен работать для любого количества значений в элементе имени.

1 Ответ

0 голосов
/ 17 сентября 2018
<xsl:variable name="formattedinput"> <!-- $testxml is your input document -->
    <xsl:for-each select="tokenize($testxml/name, '\s')"> <!-- \s means space -->
        <name><xsl:value-of select="."/></name>
    </xsl:for-each>
    <xsl:for-each select="tokenize($testxml/age, '\s')">
        <age><xsl:value-of select="."/></age>
    </xsl:for-each>
</xsl:variable> <!-- now you have a proper format of data (you can also use this with apply templates instead of for-each) -->
<xsl:for-each select="$formattedinput/name">
    <xsl:variable name="currpos" select="position()"/>
    <person>
        <name><xsl:value-of select="."/></name>
        <!-- get related age by position -->
        <age><xsl:value-of select="$formattedinput/age[count(preceding::age) + 1 = $currpos]"/></age>
    </person>
</xsl:for-each>

Это не даст вам точный вывод, но невозможно назвать узел как <name="name1"/>. Я пробовал это нормально и с операцией <xsl:element>.

...