根据条件构建xml标记而不使用CDATA

时间:2015-07-24 12:18:18

标签: xml xslt xpath

我需要根据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> 

1 个答案:

答案 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。

相关联