2016-10-14 3 views
0

Я пытаюсь преобразовать набор данных с помощью XSLT. Только один раздел должен получить дополнительные теги.Обтекание определенных узлов XML в тегах с использованием XSLT

<formData> 
    <baseFields> 
     <elementA>TEST</elementA> 
     <elementB>TEST2</elementB> 
    </baseFields> 
    <dataFields> 
     <groupA> 
      <elementA>TEST</elementA> 
      <elementB>TEST2</elementB> 
     </groupA> 
     <groupB> 
      <elementA>TEST</elementA> 
      <elementB>TEST2</elementB> 
     </groupB> 
    </dataFields> 
</formData> 

в

<formData> 
    <elementA>TEST</elementA> 
    <elementB>TEST2</elementB> 
    <groupA> 
     <elementA><asCurrent>TEST</asCurrent></elementA> 
     <elementB><asCurrent>TEST2</asCurrent></elementB> 
    </groupA> 
    <groupB> 
     <elementA><asCurrent>TEST</asCurrent></elementA> 
     <elementB><asCurrent>TEST2</asCurrent></elementB> 
    </groupB> 
</formData> 

baseFields группа и группа поля данных должны быть удалены, и узлы или текстовые элементы в разделе Поля данных должны быть завернуты в asCurrent тегов.

Любая помощь будет оценена!

Обновление: Основываясь на помощи Dan Field, я смог обработать это, используя следующий XSLT.

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

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

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

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

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="dataFields//text()"> 
      <asCurrent><xsl:copy><xsl:apply-templates select="text()"/></xsl:copy></asCurrent> 
    </xsl:template> 
</xsl:transform> 

ответ

0

Одним из подходов является простым тождественное преобразование с помощью шаблонов, чтобы соответствовать теги, которые вы хотите сбросить, что просто применить следующий шаблон:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 

    <xsl:strip-space elements="*"/> 
    <xsl:template match="baseFields"> 
     <xsl:apply-templates /> 
    </xsl:template> 

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

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:transform> 

XSLTransform

+1

Ваш первый шаблон является избыточным и может быть удален. OTOH, добавление '' может быть полезным. –

+0

Спасибо за помощь! Я смог использовать XSLT в качестве базы для моего использования. Я добавил и добавил одно дополнительное соответствие для текстовых узлов в теге dataFields, чтобы обернуть их в теги asCurrent – Neil

+0

Спасибо за советы @ michael.hor257k! –

Смежные вопросы