想象一下,我需要映射以下xml文件。
来源
<Persons>
<Person>
<Id>2</Id>
<ParentId>3</ParentId>
<Name>Some dude</Name>
</Person>
<Person>
<Id>3</Id>
<ParentId></ParentId>
<Name>Some dude2</Name>
</Person>
</Persons>
目标
<Persons>
<Person>
<Name>Some dude</Name>
<Parent>
<Name>Some dude2</Name>
</Parent>
</Person>
</Persons>
现在,我应该如何将正确的父母与biztalk地图中的人对应?
由于
答案 0 :(得分:1)
如果您将BizTalk BTM地图更改为使用xslt directly而不是visual spiderweb,然后应用以下xslt(显然BizTalk通常也需要命名空间)。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Persons">
<Persons>
<xsl:apply-templates select="Person[normalize-space(ParentId/text()) != '']" />
</Persons>
</xsl:template>
<xsl:template match="Person">
<Person>
<Name>
<xsl:value-of select="Name/text()"/>
</Name>
<Parent>
<Name>
<xsl:variable name="parentId" select="ParentId/text()" />
<xsl:value-of select="/Persons/Person[Id=$parentId]/Name/text()" />
</Name>
</Parent>
</Person>
</xsl:template>
</xsl:stylesheet>
如果您想包括没有父母的人,请将第一个apply-templates
更改为:
<xsl:apply-templates select="Person" />