我希望制作一个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节点的位置。可以有很多附件,而不仅仅是两个。
从用户更新
我对此很新,但我尝试创建没有标题,电子邮件和附件标记的有效负载。然后习惯将它们排列成正确的顺序,但这看起来很糟糕。而且不可扩展
答案 0 :(得分:2)
怎么样:
<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>
</xsl:text>
</xsl:template>
<xsl:template match="body">
<xsl:text>
</xsl:text>
<xsl:value-of select="text()"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="attachments">
<xsl:for-each select="attachment">
<xsl:text>

</xsl:text>
<xsl:apply-templates select="../../header/to"/>
<xsl:value-of select="name/text()"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>