2013-05-08 2 views
0

я хочу, чтобы автоматически процесс, с помощью XSLT Этого XML с помощью, например, полей и значения должен быть динамически разобран, а не жестко:XSL преобразование - дерево XML, чтобы простое поле значения XML

<root> 
<field1>value1</field1> 
<field2>value2</field2> 
</root> 

к этому:

<items> 
<field>field1</field> 
<value>value1</value> 
<field>field2</field> 
<value>value2</value> 
</items> 

Пожалуйста, помогите.

ответ

0

Вам нужно что-то вроде:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" encoding="UTF-8"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="root"> 
    <items> 
     <xsl:apply-templates/> 
    </items> 
    </xsl:template> 

    <xsl:template match="*"> 
    <xsl:param name="firstElement" select="replace(name(),'([0-9])','')"/> 
    <xsl:param name="SecondElement" select="replace(text(),'([0-9])','')"/> 
    <xsl:element name="{$firstElement}"> 
     <xsl:value-of select="name()"/> 
    </xsl:element> 
    <xsl:element name="{$SecondElement}"> 
     <xsl:value-of select="."/> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 
+0

Отлично! Спасибо, это было очень просто! Благодаря! – Sotona

0

Вы можете использовать функцию name(), чтобы получить имя текущего элемента.
Например, он вернет 'field1', если . is <field1>.

Так соответствующая часть шаблона будет

<field><xsl:value-of select="name()" /></field> 
<value><xsl:value-of select="." /></value> 
Смежные вопросы