Transformeer tagwaarde naar tagnaam (XSL)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Het probleem

In testbestand

<?xml version="1.0"?>
<Items>
	<Item><Item_code>00000001</Item_code><Item_type>S</Item_type>
		<Description>Dinges_01</Description>
		<FreeFields>
  			<FreeTexts>
				<FreeText><FreeText_number>1</FreeText_number></FreeText>
				<FreeText><FreeText_number>2</FreeText_number>Veld_02</FreeText>
				<FreeText><FreeText_number>3</FreeText_number>Veld_03</FreeText>
				<FreeText><FreeText_number>4</FreeText_number></FreeText>
			</FreeTexts>
		</FreeFields>
	</Item>

	<Item><Item_code>00000002</Item_code><Item_type>S</Item_type>
		<Description>Widget_01</Description>
		<FreeFields>
  			<FreeTexts>
				<FreeText><FreeText_number>1</FreeText_number></FreeText>
				<FreeText><FreeText_number>2</FreeText_number>Field_02</FreeText>
				<FreeText><FreeText_number>3</FreeText_number>Field_03</FreeText>
				<FreeText><FreeText_number>4</FreeText_number></FreeText>
			</FreeTexts>
		</FreeFields>
	</Item>	
</Items>

wil ik

<FreeText><FreeText_number>1</FreeText_number></FreeText>
<FreeText><FreeText_number>2</FreeText_number>Veld_02</FreeText>
<FreeText><FreeText_number>3</FreeText_number>Veld_03</FreeText>
<FreeText><FreeText_number>4</FreeText_number></FreeText>

omfietsen naar

<FreeText><FreeText_number_1>1</FreeText_number_1></FreeText>
<FreeText><FreeText_number_2>2</FreeText_number_2>Veld_02</FreeText>
<FreeText><FreeText_number_3>3</FreeText_number_3>Veld_03</FreeText>
<FreeText><FreeText_number_4>4</FreeText_number_4></FreeText>

en uiteindelijk naar

<FreeText_number_1>       </FreeText_number_1>
<FreeText_number_2>Veld_02</FreeText_number_2>
<FreeText_number_3>Veld_03</FreeText>
<FreeText_number_4>       </FreeText_number_4>

Voorbeeld Stack Overflow =

[1]:

XML - invoer

<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>

XSL

<?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" />


<!-- =========================================== -->
<!-- Identity Transformation                     -->
<!-- =========================================== -->
<!--                                             -->
<!-- Looks a bit strange, but probably is the    -->
<!-- exact same: All data is being copied        -->

<xsl:template match="Policy">
  <xsl:element name="Policy">
     <xsl:apply-templates />
  </xsl:element>
</xsl:template>


<!-- =========================================== -->
<!-- Alle attributen omfietsen naar subelementen -->
<!-- =========================================== -->


<!-- Limited template to "Attributes" nodes      -->
<!-- =========================================== -->
<!--                                             -->
<xsl:template match="Attributes">


	<!-- Initiate variable "name"                    -->
	<!-- =========================================== -->
	<!--                                             -->
	<!-- * https://www.w3schools.com/xml/ref_xsl_el_variable.asp -->
	<!-- * Within <Attributes>, there is only one    -->
	<!--   field <AttributeValue>                    -->
	<!--                                             -->
  	<xsl:variable name="name" select="AttributeName" />



	<!-- Dynamically create element                  -->
	<!-- =========================================== -->
	<!--                                             -->
	<!-- * https://www.w3schools.com/xml/ref_xsl_el_element.asp -->
	<!--                                             -->
  <xsl:element name="{$name}">

	<!-- Here's the value of the other field fetched -->
	<!--                                             -->
	<xsl:value-of select="AttributeValue" />
  
  </xsl:element>


<!-- Close template                              -->
<!--                                             -->
</xsl:template>


</xsl:stylesheet>

Bronnen