将字符串值转换为XML标记名称

时间:2013-11-04 20:57:25

标签: xslt

以下是我的要求。我们可以使用XSLT做到这一点吗?我想将AttributeName的值转换为策略下的标记,并将相应的AttributeValue转换为值。

输入:

<Policy>
    <Attributes>
        <AttributeName>is_policy_loan</AttributeName>
        <AttributeValue>Yes</AttributeValue>
    </Attributes>
    <Attributes>
        <AttributeName>is_policy_owners</AttributeName>
        <AttributeValue>Yes</AttributeValue>
    </Attributes>       
    <Attributes>
        <AttributeName>is_policy_twoyears</AttributeName>
        <AttributeValue>Yes</AttributeValue>
    </Attributes>       
</Policy>

输出:

<Policy>
    <is_policy_loan>Yes</is_policy_loan>
    <is_policy_owners>Yes</is_policy_owners>
    <is_policy_twoyears>Yes</is_policy_twoyears>
</Policy>

2 个答案:

答案 0 :(得分:1)

以下xsl文件将完成此任务:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- create the <AttributeName>AttributeValue</..> nodes -->
  <xsl:template match="//Attributes">
    <xsl:variable name="name" select="AttributeName" />
    <xsl:element name="{$name}">
      <xsl:value-of select="AttributeValue" />
    </xsl:element>
  </xsl:template>

  <!-- wrap nodes in a `Policy` node -->
  <xsl:template match="/">
    <Policy>
      <xsl:apply-templates/>
    </Policy>
  </xsl:template>
</xsl:stylesheet>

答案 1 :(得分:1)

我会这样做,

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
   <xsl:output method="xml" indent="yes" encoding="UTF-8" omit-xml-declaration="yes" />
   <xsl:template match="Policy">
      <xsl:element name="Policy">
         <xsl:apply-templates />
      </xsl:element>
   </xsl:template>
   <xsl:template match="Attributes">
      <xsl:variable name="name" select="AttributeName" />
      <xsl:element name="{$name}">
         <xsl:value-of select="AttributeValue" />
      </xsl:element>
   </xsl:template>
</xsl:stylesheet>

输出将是,

<Policy>
    <is_policy_loan>Yes</is_policy_loan>
    <is_policy_owners>Yes</is_policy_owners>       
    <is_policy_twoyears>Yes</is_policy_twoyears>       
</Policy>