Добавить внешний элемент с «копией» входного xml u XSLT-кода

#xml #xslt

#xml #xslt

Вопрос:

Ниже приведен входной XML-

     *<?xml version='1.0' encoding='UTF-8'?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/CR_GETA_Report_for_BIRT_Data">
    <wd:Report_Entry>
        
        <wd:Student>Sam</wd:Student>
        <wd:Units>3</wd:Units>
        <wd:Grade>B</wd:Grade>
        <wd:Academic_Period>2014 Fall</wd:Academic_Period>
        <wd:FinalTag>Western_Civilization</wd:FinalTag>
        <wd:CF_TC_Met>Yes</wd:CF_TC_Met>
    </wd:Report_Entry>
</wd:Report_Data>*
  

Ниже приведен код XSLT-

 <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wd="urn:com.workday.report/CR_GETA_Report_for_BIRT_Data"
    exclude-result-prefixes="xs"
    version="1.0">

    <xsl:param name="MatricDate"/>

    <xsl:template match="wd:Report_Data">
        <xsl:copy-of select="*"/>
    </xsl:template>
</xsl:stylesheet>
  

Я извлекаю значение ‘MatricDate = 2019/10/10’ из-за пределов XML и хочу добавить его вместе с моим входным XML-сообщением.
Кто-нибудь может мне помочь, как я могу этого добиться?

Желаемый результат —

 <?xml version="1.0" encoding="utf-8"?><wd:Report_Entry xmlns:wd="urn:com.workday.report/CR_GETA_Report_for_BIRT_Data">
        
        <wd:Student>Sam</wd:Student>
        <wd:Units>3</wd:Units>
        <wd:Grade>B</wd:Grade>
        <wd:Academic_Period>2014 Fall</wd:Academic_Period>
        <wd:FinalTag>Western_Civilization</wd:FinalTag>
        <wd:CF_TC_Met>Yes</wd:CF_TC_Met>
        <wd:MatricDate>2019/10/10</wd:MatricDate>
    </wd:Report_Entry
  

Спасибо за ваше время и усилия!

Ответ №1:

Попробуйте:

 <xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="urn:com.workday.report/CR_GETA_Report_for_BIRT_Data">

<xsl:param name="MatricDate"/>

<xsl:template match="/wd:Report_Data/wd:Report_Entry">
    <xsl:copy>
        <xsl:copy-of select="*"/>
        <wd:MatricDate>
            <xsl:value-of select="$MatricDate"/>
        </wd:MatricDate>
    </xsl:copy>
</xsl:template> 

</xsl:stylesheet>
  

Обратите внимание, что это предполагает wd:Report_Entry , что во входном XML есть только один. В противном случае результатом будет XML-фрагмент, а не правильно сформированный XML-документ с одним корневым элементом.