我有2个工作模板,只能逐个工作。如果我有两者,其中一个停止工作。我如何组合它们?感谢
输入XML:
<ProcessSourceSystemJournalEntry languageCode="en-US" systemEnvironmentCode="Production" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" versionID="9.2" xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="2.5.0" xsi:schemaLocation="http://schema.infor.com/InforOAGIS/2 http://schema.infor.com/Trunk/InforOAGIS/BODs/Developer/ProcessSourceSystemJournalEntry.xsd">
<DataArea>
<SourceSystemJournalEntry>
<JournalEntryLine sequence="1">
<GLFullAccount>L625304000</GLFullAccount>
<UserArea>
<Property>
<NameValue name="sunsys6.GeneralDescription13" type="StringType">INFORMATIQUE TELECOM TECHNOLOGIE ITT</NameValue>
</Property>
<Property>
<NameValue name="GeneralDescription16" type="StringType">NC</NameValue>
</Property>
</UserArea>
</JournalEntryLine>
</SourceSystemJournalEntry>
</DataArea>
</ProcessSourceSystemJournalEntry>
XSLT:一个模板,用于将元素的值修剪为30个字符,另一个模板用于“修复”@name属性,如果它错过了正确的前缀。两个模板都单独工作,但不能一起工作。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="http://schema.infor.com/InforOAGIS/2" xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- Trim general description -->
<xsl:template match="//my:NameValue">
<NameValue name="{@name}" type="{@type}">
<xsl:value-of select="substring(., 1, 30)"/>
</NameValue>
</xsl:template>
<!-- Append sunsys6 in the beginning -->
<xsl:template match="@name">
<xsl:attribute name="name">
<xsl:choose>
<xsl:when test="substring(.,1,7) != 'sunsys6'">
<xsl:value-of select="concat('sunsys6.',.)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
更改
<xsl:template match="//my:NameValue">
<NameValue name="{@name}" type="{@type}">
<xsl:value-of select="substring(., 1, 30)"/>
</NameValue>
</xsl:template>
到
<xsl:template match="my:NameValue">
<NameValue>
<xsl:apply-templates select="@*"/>
<xsl:value-of select="substring(., 1, 30)"/>
</NameValue>
</xsl:template>
您还可以缩短
<xsl:template match="@name">
<xsl:attribute name="name">
<xsl:choose>
<xsl:when test="substring(.,1,7) != 'sunsys6'">
<xsl:value-of select="concat('sunsys6.',.)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
到
<xsl:template match="@name[substring(.,1,7) != 'sunsys6']">
<xsl:attribute name="name">
<xsl:value-of select="concat('sunsys6.',.)"/>
</xsl:attribute>
</xsl:template>