Transformeer tagwaarde naar tagnaam (XSL)
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>