【发布时间】:2015-09-01 09:39:00
【问题描述】:
我的要求是在给定的场景下生成一个空元素。我在这个Replacing the element tag with value to end tag 中也有同样的情况。但是,生成的输出不是我所期望的。
条件:
按优先级映射:
1. 如果 Test1等于Payment1,生成这个空元素<st:Test1/> 2. else if Test2等于Payment2,生成这个空元素<st:Test2/> 3. else if Test3 等于 Payment3,生成这个空元素<st:Test3/>。
我的 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:st="http://www.ebinterface.at/schema/4p1/" xmlns:po="http://schema.ebinterface.at/schema/4p1/" exclude-result-prefixes="po">
<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>
<xsl:template match="*">
<xsl:element name="st:{local-name()}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
<xsl:template match="po:DEFG" priority="1">
<st:DEFG>
<!--handle any existing child content-->
<xsl:apply-templates select="@* | node()"/>
<xsl:if test="not(po:Test1)">
<xsl:call-template name="Test1"/>
</xsl:if>
<xsl:if test="not(po:Test2)">
<xsl:call-template name="Test2"/>
</xsl:if>
<xsl:if test="not(po:Test3)">
<xsl:call-template name="Test3"/>
</xsl:if>
</st:DEFG>
</xsl:template>
<xsl:template match="po:Test1[.='Payment1']" name="Test1" priority="1">
<st:Test1/>
</xsl:template>
<xsl:template match="po:Test2[.='Payment2']" name="Test2" priority="1">
<st:Test2/>
</xsl:template>
<xsl:template match="po:Test3[.='Payment3']" name="Test3" priority="1">
<st:Test3/>
</xsl:template>
<xsl:template match="*[namespace-uri()='http://www.ebinterface.at/schema/4p1/']">
<xsl:element name="po:{local-name()}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
<xsl:template match="*[namespace-uri()='http://www.ebinterface.at/schema/4p1/']/@*">
<xsl:attribute name="po:{local-name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<Statistics xmlns="http://schema.ebinterface.at/schema/4p1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ebinterface.at/schema/4p1/" Type="abc" Title="Statistics">
<ABC dsig="fh">Sample ABC</ABC>
<DEFG>
<Note>Wir ersuchen um termingerechte Bezahlung.</Note>
<Amount currencyCode="EUR">12.36</Amount>
<Test1>Payment1</Test1>
</DEFG>
</Statistics>
生成的输出:
<?xml version="1.0" encoding="UTF-8"?>
<st:Statistics xmlns:st="http://www.ebinterface.at/schema/4p1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ebinterface.at/schema/4p1/" Type="abc" Title="Statistics">
<st:ABC dsig="fh">Sample ABC</st:ABC>
<st:DEFG>
<st:Note>Wir ersuchen um termingerechte Bezahlung.</st:Note>
<st:Amount currencyCode="EUR">12.36</st:Amount>
<st:Test1/>
<st:Test2/> **This empty element should not appear since there's no Test2=Payment2**
<st:Test3/> **This empty element should not appear since there's no Test3=Payment3**
</st:DEFG>
</st:Statistics>
预期输出:
<?xml version="1.0" encoding="UTF-8"?>
<st:Statistics xmlns="http://schema.ebinterface.at/schema/4p1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ebinterface.at/schema/4p1/" st:Type="abc" st:Title="Statistics">
<st:ABC st:dsig="fh">Sample ABC</st:ABC>
<st:DEFG>
<st:Note>Wir ersuchen um termingerechte Bezahlung.</st:Note>
<st:Amount st:currencyCode="EUR">12.36</st:Amount>
<st:Test1/>
</st:DEFG>
</stStatistics>
提前谢谢你。
非常感谢您的回复。
【问题讨论】:
标签: java xml xslt encoding utf-8