首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用变量/未知值计数XSLT

用变量/未知值计数XSLT
EN

Stack Overflow用户
提问于 2017-11-29 04:54:32
回答 1查看 146关注 0票数 0

我对XSLT非常陌生,我正试图创建一个CSV,列出每个教授每年拥有的出版物数量,每个条目都是由dm:INTELLCONT表示的不同的出版物,并且每年都用dm:DTY_PUB来表示--我很难找到如何正确地完成这个任务--如果我一年不编写硬代码的话,我想在他们每年发布一些东西的时候循环这样做。我当前的XML文件是:

代码语言:javascript
复制
<?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文件是:

代码语言:javascript
复制
<?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>&#xa;</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>&#xa;</xsl:text>
		
		
		
		
		
		<!-- output newline -->
		<xsl:text>&#xa;</xsl:text>
	</xsl:template>
	
</xsl:stylesheet>

正如您所看到的,在我每年试图统计每一份出版物的部分,有注释,每年汇编发表的论文,

我想循环通过他们每年出版和统计有多少出版物,这一年,任何帮助都将非常感谢,谢谢提前!

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 00:49:30

您似乎已经掌握了XSLT1.0Muenchian分组的基本思想,这是困难的部分,然后您在一个简单的上下文问题上出错了。在此:

代码语言:javascript
复制
<xsl:for-each select="dm:Record/dm:INTELLCONT[...]">
    <xsl:sort select="(dm:DTY_PUB)" order="ascending"/> 
    <xsl:value-of select="count(dm:Record/dm:INTELLCONT[..]/>
</xsl:for-each>

这是没有意义的,因为在for-each中,上下文项是INTELLICONT元素,并且您试图向下选择dn:RECORD。

在需要计算组大小的Muenchian分组中,逻辑结构是

代码语言:javascript
复制
<xsl:for-each select="one item with each key value">
  <xsl:value-of select="count(all items with the same key value)"/>
</xsl:for-each>

所以我希望看到count(key(....))

您确定不能为此使用XSLT2.0和xsl:for-each-group吗?它让生活变得更容易..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47545310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档