XSLT переформатировать XML-документ - PullRequest
1 голос
/ 15 марта 2012

Я хочу создать XSLT, который преобразует входной XML ниже:

<?xml version="1.0" encoding="UTF-8"?>
<payload>
    <header>
        <from>From: exmaple@domain.com</from>
        <to>To: exmaple@domain.com</to>
    </header>

    <email>
        <body>Hello, email body here...</body>
    </email>

    <attachments>
        <attachment>
            <name>log1</name>
        </attachment>

        <attachment>
            <name>log2</name>
        </attachment>

    </attachments>
</payload>

в:

From: exmaple@domain.com
To: exmaple@domain.com

Hello, email body here...

To: exmaple@domain.com
log1


To: exmaple@domain.com
log2

Где узел To повторяется после каждого вложения.Может быть несколько вложений, а не только два.

ОБНОВЛЕНИЕ ОТ ПОЛЬЗОВАТЕЛЯ

Я довольно новичок в этом, но я попытался создать полезную нагрузку без заголовка, email,и теги вложений.Затем использовал их в правильном порядке, но это выглядит ужасно.И не масштабируется

1 Ответ

2 голосов
/ 15 марта 2012

Как насчет:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="text"/>

  <xsl:template match="from|to">
    <xsl:value-of select="text()"/>
    <xsl:text>&#0010;</xsl:text>
  </xsl:template>

  <xsl:template match="body">
    <xsl:text>&#0010;</xsl:text>
    <xsl:value-of select="text()"/>
    <xsl:text>&#0010;</xsl:text>
  </xsl:template>

  <xsl:template match="attachments">
    <xsl:for-each select="attachment">
      <xsl:text>&#0010;&#0010;</xsl:text>
      <xsl:apply-templates select="../../header/to"/>
      <xsl:value-of select="name/text()"/>
      <xsl:text>&#0010;</xsl:text>
    </xsl:for-each>
  </xsl:template>

  <xsl:template match="text()"/>

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