我想请求您的指导,以更好地实现预期的输出。我有一个我无法控制的 XSLT 文件,我想应用修改初始结构的转换。
我的目标是根据 all_releases 结构中找到的年份重新创建 report_entry 结构。
XML 结构(输入)
<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="http://www.gaming.org/">
<wd:Report_Entry>
<wd:id>150</wd:id>
<wd:name>Call-of-Duty</wd:name>
<wd:all_releases>
<wd:year>2017</wd:year>
</wd:all_releases>
<wd:all_releases>
<wd:year>2020</wd:year>
</wd:all_releases>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:id>250</wd:id>
<wd:name>Metal Slug</wd:name>
<wd:all_releases>
<wd:year>2003</wd:year>
</wd:all_releases>
</wd:Report_Entry>
</wd:Report_Data>
预期的 XML 结构(输入)
<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="http://www.gaming.org/">
<wd:Report_Entry>
<wd:id>150</wd:id>
<wd:name>Call-of-Duty</wd:name>
<wd:year>2017</wd:year>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:id>150</wd:id>
<wd:name>Call-of-Duty</wd:name>
<wd:year>2020</wd:year>
</wd:Report_Entry>
<wd:Report_Entry>
<wd:id>250</wd:id>
<wd:name>Metal Slug</wd:name>
<wd:year>2003</wd:year>
</wd:Report_Entry>
</wd:Report_Data>
我的XSLT
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="http://www.gaming.org/" >
<xsl:output method="text" byte-order-mark="yes" indent="no" encoding="utf-8"/>
<xsl:template match="/">
<File>
<xsl:call-template name="Header"/>
<xsl:text>
</xsl:text>
<xsl:for-each select="/wd:Report_Data/wd:Report_Entry">
<xsl:call-template name="Rows"/>
</xsl:for-each>
</File>
</xsl:template>
<xsl:template name="Header">
<xsl:text>"id";</xsl:text>
<xsl:text>"name";</xsl:text>
<xsl:text>"year";</xsl:text>
</xsl:template>
<xsl:template name="Rows">
<col>"<xsl:value-of select="wd:id"/>";</col>
<col>"<xsl:value-of select="wd:name"/>";</col>
<col>"<xsl:value-of select="wd:all_releases/wd:year"/>";</col>
</xsl:template>
</xsl:stylesheet>
电流输出
<File xmlns:wd="http://www.gaming.org/">"id";"name";"year";
<col>"1000";</col>
<col>"Call-of-Duty";</col>
<col>"2017 2020";</col>
<col>"2000";</col>
<col>"Metal Slug";</col>
<col>"2003";</col>
</File>
预期产量
<File xmlns:wd="http://www.gaming.org/">"id";"name";"year";
<col>"150";</col>
<col>"Call-of-Duty";</col>
<col>"2017";</col>
<col>"150";</col>
<col>"Call-of-Duty";</col>
<col>"2020";</col>
<col>"250";</col>
<col>"Metal Slug";</col>
<col>"2003";</col>
</File>
我不完全理解你的输出格式。它显然是 XML,但您现有的样式表指定
text
作为输出方法,这对我来说毫无意义。
我认为这样的事情应该会产生你想要的结果或至少接近它:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wd="http://www.gaming.org/">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/wd:Report_Data ">
<File>
<xsl:text>"id";"name";"year"; </xsl:text>
<xsl:for-each select="wd:Report_Entry">
<xsl:variable name="idname">
<col>"<xsl:value-of select="wd:id"/>";</col>
<col>"<xsl:value-of select="wd:name"/>";</col>
</xsl:variable>
<xsl:for-each select="wd:all_releases">
<xsl:copy-of select="$idname"/>
<col>"<xsl:value-of select="wd:year"/>";</col>
</xsl:for-each>
</xsl:for-each>
</File>
</xsl:template>
</xsl:stylesheet>