我需要根据actionCode形成一个xml元素,该元素可以是eithr CREATE或UPDATE
如果 actionCode 已创建,那么我需要String.split( String )
,如果它是UPDATE,那么我需要形成<v1:createStudent>
&gt ;.
我可以使用CDATA编写如下
<v1:updateStudent
使用CDATA我有一些问题。我需要使用CDATA的任何其他解决方案 例如,见下面的代码
<xsl:if test="$actionCode ='CREATE'">
<xsl:text disable-output-escaping="yes">
<![CDATA[<v1:createOrderCheckoutRequest version="1">]]>
</xsl:text>
</xsl:if>
<xsl:if test="$actionCode ='UPDATE'">
<xsl:text disable-output-escaping="yes">
<![CDATA[<v1updateOrderCheckoutRequest version="1">]]>
</xsl:text>
</xsl:if>
答案 0 :(得分:1)
OOG。如果您正在尝试创建一个具有即时生成名称的元素,那么DON&T; T会尝试通过欺骗XSLT处理器来编写看起来像XML的文本。
这是xsl:element
节点的一个用途。您可以使用限定名称构造变量,并使用它来命名元素。
示例样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:v1="urn:v1"
extension-element-prefixes=""
exclude-result-prefixes="">
<xsl:template match="/">
<xsl:variable name="action"
select="/indoc/action"/>
<xsl:variable name="element-name">
<xsl:text>v1:</xsl:text>
<xsl:choose>
<xsl:when test="$action = 'create'">
<xsl:text>createNode</xsl:text>
</xsl:when>
<xsl:when test="$action = 'update'">
<xsl:text>updateNode</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>dontKnow</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<outdoc>
<xsl:element name="{$element-name}">
<contents/>
</xsl:element>
</outdoc>
</xsl:template>
</xsl:stylesheet>
示例输入:
<indoc>
<action>update</action>
</indoc>
示例输出:
<?xml version="1.0"?>
<outdoc xmlns:v1="urn:v1">
<v1:updateNode>
<contents/>
</v1:updateNode>
</outdoc>
以这种方式使用xsl:element
的好处是它可以识别名称空间前缀。它知道&#34; v1:&#34;嵌入在您的变量中与urn:v1。