【发布时间】:2017-11-29 04:54:32
【问题描述】:
我对 XSLT 非常陌生,我正在尝试创建每个教授每年发表的出版物数量的 CSV,每个条目都是不同的出版物,用
dm:INTELLCONT 并且每年都用dm:DTY_PUB 表示,如果我不对年份进行硬编码,我无法弄清楚如何正确执行此操作,我想在他们发布的每一年都循环执行此操作。我当前的 XML 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<Data xmlns="http://www.digitalmeasures.com/schema/data" xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata" dmd:date="2017-10-16">
<INTELLCONT id="151370213376" dmd:originalSource="MANAGE_DATA" dmd:lastModified="2017-10-03T11:41:47" dmd:startDate="2016-04-15" dmd:endDate="2016-04-15">
<REFEREED>Yes</REFEREED>
<CONTYPE>Abstract</CONTYPE>
<CONTYPEOTHER/>
<STATUS>Published</STATUS>
<TITLE>Sample Title</TITLE>
<TITLE_SECONDARY/>
<DTM_PUB>April (2nd Quarter/Spring)</DTM_PUB>
<DTD_PUB>15</DTD_PUB>
<DTY_PUB>2016</DTY_PUB>
<PUB_START>2016-04-15</PUB_START>
<PUB_END>2016-04-15</PUB_END>
<USER_REFERENCE_CREATOR>Yes</USER_REFERENCE_CREATOR>
</INTELLCONT>
<INTELLCONT id="151368284160" dmd:originalSource="MANAGE_DATA" dmd:lastModified="2017-10-03T10:44:48" dmd:startDate="2017-01-01" dmd:endDate="2017-12-31">
<REFEREED>Yes</REFEREED>
<CONTYPE>Journal Article</CONTYPE>
<CONTYPEOTHER/>
<STATUS>Published</STATUS>
<TITLE>Sample Title</TITLE>
<TITLE_SECONDARY/>
<INTELLCONT_AUTH id="151368284163">
<FACULTY_NAME/>
<FNAME>FN</FNAME>
<MNAME/>
<LNAME>LN</LNAME>
<INSTITUTION/>
<ROLE>Author</ROLE>
<STUDENT_LEVEL/>
</INTELLCONT_AUTH>
<INTELLCONT_AUTH id="151368284161">
<FACULTY_NAME>1898739</FACULTY_NAME>
<FNAME>FN</FNAME>
<MNAME>MN</MNAME>
<LNAME>LN</LNAME>
<INSTITUTION/>
<ROLE>Author</ROLE>
<STUDENT_LEVEL/>
</INTELLCONT_AUTH>
<PUBLISHER>Public Health</PUBLISHER>
<PUBCTYST/>
<PUBCNTRY/>
<VOLUME>14</VOLUME>
<ISSUE>3</ISSUE>
<PAGENUM>265</PAGENUM>
<DTY_PUB>2017</DTY_PUB>
<PUB_START>2017-01-01</PUB_START>
<PUB_END>2017-12-31</PUB_END>
<USER_REFERENCE_CREATOR>Yes</USER_REFERENCE_CREATOR>
</INTELLCONT>
<INTELLCONT id="151368284160" dmd:originalSource="MANAGE_DATA" dmd:lastModified="2017-10-03T10:44:48" dmd:startDate="2017-01-01" dmd:endDate="2017-12-31">
<REFEREED>Yes</REFEREED>
<CONTYPE>Journal Article</CONTYPE>
<CONTYPEOTHER/>
<STATUS>Published</STATUS>
<TITLE>Sample Title</TITLE>
<TITLE_SECONDARY/>
<INTELLCONT_AUTH id="151368284163">
<FACULTY_NAME/>
<FNAME>FN</FNAME>
<MNAME/>
<LNAME>LN</LNAME>
<INSTITUTION/>
<ROLE>Author</ROLE>
<STUDENT_LEVEL/>
</INTELLCONT_AUTH>
<PUBLISHER>Public Health</PUBLISHER>
<PUBCTYST/>
<PUBCNTRY/>
<VOLUME>14</VOLUME>
<ISSUE>3</ISSUE>
<PAGENUM>265</PAGENUM>
<DTY_PUB>2017</DTY_PUB>
<PUB_START>2017-01-01</PUB_START>
<PUB_END>2017-12-31</PUB_END>
<USER_REFERENCE_CREATOR>Yes</USER_REFERENCE_CREATOR>
</INTELLCONT>
</Data>
我当前的 XSL 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:csv="csv:csv"
xmlns="http://www.w3.org/1999/xhtml" xmlns:dm="http://www.digitalmeasures.com/schema/data"
xmlns:dmd="http://www.digitalmeasures.com/schema/data-metadata"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:math="http://www.w3.org/2005/xpath-functions/math"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:xhtml="http://www.w3.org/1999/xhtml" exclude-result-prefixes="array fn map math xhtml xs">
<xsl:output method="text" encoding="utf-8"/>
<xsl:variable name="delimiter" select="','"/>
<!-- xmlns:dm is the xmlns attribute in Data.-->
<!-- define an array containing the fields we are interested in -->
<xsl:variable name="fieldArray">
<field>Journal Articles</field>
<field>Books</field>
<field>Book Chapters</field>
<field>Conference Proceeedings</field>
<field>Others</field>
</xsl:variable>
<xsl:param name="fields" select="document('')/*/xsl:variable[@name='fieldArray']/*" />
<xsl:key name="Year-Published" match="dm:INTELLCONT" use="dm:DTY_PUB"/>
<xsl:template match="/dm:Data">
<!--key("Year-Published", '2017')-->
<!--<xsl:text>Journal Articles</xsl:text>
<xsl:value-of select="$delimiter" />
<xsl:text>Books</xsl:text>
<xsl:value-of select="$delimiter" />
<xsl:text>Book Chapters</xsl:text>
<xsl:value-of select="$delimiter" />
<xsl:text>Conference Proceedings</xsl:text>
<xsl:value-of select="$delimiter" />
<xsl:text>Others</xsl:text>
-->
<xsl:text>Year,</xsl:text>
<!-- tabulating Years as columns -->
<xsl:for-each select="dm:Record/dm:INTELLCONT[generate-id()=generate-id(key('Year-Published', dm:DTY_PUB)[1])]">
<xsl:sort select="(dm:DTY_PUB)" order="ascending"/>
<xsl:value-of select="(dm:DTY_PUB)"/> <xsl:text>,</xsl:text>
</xsl:for-each>
<xsl:text>
</xsl:text>
<!-- Tabulating Published Papers Per Year-->
<xsl:for-each select="dm:Record/dm:INTELLCONT[generate-id()=generate-id(key('Year-Published', dm:DTY_PUB)[1])]">
<xsl:sort select="(dm:DTY_PUB)" order="ascending"/>
<xsl:value-of select="count(dm:Record/dm:INTELLCONT[dm:CONTYPE='Journal Article'][dm:STATUS='Published'][dm:DTY_PUB=key('Year-Published', dm:DTY_PUB)[1])][dm:USER_REFERENCE_CREATOR!='No'])"/>
<xsl:value-of select="$delimiter" />
</xsl:for-each>
<xsl:text>
</xsl:text>
<!-- output newline -->
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
如您所见,我试图计算每年每篇出版物的部分有评论Tabulating Published Papers Per Year
我想遍历他们发布的每一年,并计算那一年有多少出版物,非常感谢任何帮助,在此先感谢!
【问题讨论】:
标签: xml csv xslt foreach count