所以我有一个从 php curl 响应生成的 XML 文件,然后将其转换为 CSV,这样下面的每个 mods 元素都是一行。我在此处检查的答案中使用样式表得到了一些 CSV ,但这并不是我想要做的。
我的 XML(简化):
<xml>
<mods xmlns="http://www.loc.gov/mods/">
<typeOfResource>StillImage</typeOfResource>
<titleInfo ID="T-1">
<title>East Bay Street</title>
</titleInfo>
<subject ID="SBJ-2">
<topic>Railroads</topic>
</subject>
<subject ID="SBJ-3">
<geographic>Low Country</geographic>
</subject>
<subject ID="SBJ-4">
<geographic>Charleston (S.C.)</geographic>
</subject>
<subject ID="SBJ-7">
<hierarchicalGeographic>
<county>Charleston County (S.C.)</county>
</hierarchicalGeographic>
</subject>
<physicalDescription>
<form>Images</form>
</physicalDescription>
<note>Caption: 'War Views. No.179. Ruins of the Northeastern Railway Depot, Charleston.' This is a stereograph image which measures 3 1/2" X 7". Date assumed to be 1865.</note>
<originInfo>
<dateCreated>1865</dateCreated>
</originInfo>
<location>
<physicalLocation>The Charleston Museum Archives</physicalLocation>
</location>
<relatedItem type="host">
<titleInfo>
<title>Charleston Museum Civil War Photographs</title>
</titleInfo>
</relatedItem>
</mods>
<mods>
more nodes...
</mods>
</xml>
我当前的 XSL 来自上面的堆栈帖子:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="iso-8859-1"/>
<xsl:strip-space elements="*" />
<xsl:template match="/*/child::*">
<xsl:for-each select="child::*">
<xsl:if test="position() != last()"><xsl:value-of select="normalize-space(.)"/>, </xsl:if>
<xsl:if test="position() = last()"><xsl:value-of select="normalize-space(.)"/> <xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这将输出 CSV,其中每个 MODS 元素是一行,每个子元素是该行上的逗号分隔值。是否可以修改 XSL,使每个 MODS 元素为一行,但匹配子元素的值被分组?就像是:
StillImage,East Bay Street,Railroads,**Low County;Charleston (S.C.)**,Charleston County (S.C.), Images
.......等等。
因此,当节点(例如多个主题 -> 地理条目)匹配时,它们会被分组并用分号分隔,而不是占用多个逗号分隔的值?希望我有点道理。谢谢!