【发布时间】:2014-09-24 10:03:47
【问题描述】:
基本上我有源 XML
<RootElement attr=yes>
<parentElement>
<ChildElement1>some value in str</ChildElement1>
<ChildElement2>some value in str</ChildElement2>
<ChildComplexType1>
<grandChildElement1>some value in str</grandChildElement1>
</ChildComplexType1>
</parentElement>
</RootElement>
我正在使用 XSLT 将其更改为其他一些 XML。 消费结果 XML 的消费者期望如下
<RootElement attr=yes>
<parentElement>
<ChildElement1>some value in str</ChildElement1>
<ChildElement2>some value in str</ChildElement2>
<ChildComplexType1>
<grandChildElement1>some value in str</grandChildElement1>
<grandChildElement2>Default Value/ From Source XML</grandChildElement2>
</ChildComplexType1>
</parentElement>
</RootElement>
问题是我正在使用以下匹配规则,但它不起作用。 任何人都可以提出一个更好的规则吗? 我相信这是一个基本问题,抱歉,因为我是 XSLT 的新手。
<xsl:template match="@*|node()" priority="1">
<xsl:copy copy-namespaces="no">
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="*:parentElement"
priority="2">
<xsl:element name="{name()}"
namespace="http://namespace"
inherit-namespaces="no">
<xsl:namespace name="ns5"
select="'namespace'" />
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="*:ChildComplexType1">
<xsl:if test="not(*:grandChildElement2)" priority="3">
<grandChildElement2>defaultValue</grandChildElement2>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
【问题讨论】:
标签: java xslt xml-parsing saxon