#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-документ с одним корневым элементом.