我有以下XML文件作为输入,对于<CI_DateTypeCode>
元素的每个实例,我都需要更改@codeListValue
属性值。
转换有效,但我在@codeList
属性和@codeListValue
属性之间输出了不必要/不需要的新行。
正如您所看到的,在源XML文件中,属性之间没有换行符。如何避免这种行为?
XML源文件:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="c:ISO19139_rve.xsl"?>
<MD_Metadata xmlns="http://www.isotc211.org/schemas/2005/gmd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:gco="http://www.isotc211.org/schemas/2005/gco" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.isotc211.org/schemas/2005/gmd/gmd.xsd">
<MD_DataIdentification>
<citation>
<CI_Citation>
<title>
<gco:CharacterString>Title</gco:CharacterString>
</title>
<date>
<CI_Date>
<date>
<gco:CharacterString>2014-04-15</gco:CharacterString>
</date>
<dateType>
<CI_DateTypeCode codeList="./resource/codeList.xml#CI_DateTypeCode" codeListValue="Creazione">Creazione</CI_DateTypeCode>
</dateType>
</CI_Date>
</date>
</CI_Citation>
</citation>
</MD_DataIdentification>
</MD_Metadata>
XSL转换:
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:gco="http://www.isotc211.org/schemas/2005/gco"
xmlns:gmd="http://www.isotc211.org/schemas/2005/gmd"
xmlns="http://www.isotc211.org/schemas/2005/gmd"
>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes" encoding="UTF-8"/>
<!-- identity template -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<!-- <CI_DateTypeCode>: @codeListValue attribute values -->
<xsl:param name="pCIDateTypeCodeCreation" select="'creation'"/>
<xsl:param name="pCIDateTypeCodePublication" select="'publication'"/>
<xsl:param name="pCIDateTypeCodeRevision" select="'revision'"/>
<xsl:param name="pCIDateTypeCodeOther" select="''"/>
<!-- override: <CI_DateTypeCode> to apply @codeListValue attribute values -->
<xsl:template match="gmd:CI_DateTypeCode/@codeListValue">
<xsl:choose>
<xsl:when test="lower-case(.) eq 'creazione'">
<xsl:attribute name="codeListValue">
<xsl:value-of select="$pCIDateTypeCodeCreation"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="lower-case(.) eq 'pubblicazione'">
<xsl:attribute name="codeListValue">
<xsl:value-of select="$pCIDateTypeCodePublication"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="lower-case(.) eq 'revisione'">
<xsl:attribute name="codeListValue">
<xsl:value-of select="$pCIDateTypeCodeRevision"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="lower-case(.) eq 'rilievo'">
<xsl:attribute name="codeListValue">
<xsl:value-of select="$pCIDateTypeCodeOther"/>
</xsl:attribute>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
实际XML输出(请参阅@codeList
和@codeListValue
属性之间带有缩进的新行):
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="c:ISO19139_rve.xsl"?>
<MD_Metadata xmlns="http://www.isotc211.org/schemas/2005/gmd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gco="http://www.isotc211.org/schemas/2005/gco"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="http://www.isotc211.org/schemas/2005/gmd/gmd.xsd">
<MD_DataIdentification>
<citation>
<CI_Citation>
<title>
<gco:CharacterString>Title</gco:CharacterString>
</title>
<date>
<CI_Date>
<date>
<gco:CharacterString>2014-04-15</gco:CharacterString>
</date>
<dateType>
<CI_DateTypeCode codeList="./resource/codeList.xml#CI_DateTypeCode"
codeListValue="creation">Creazione</CI_DateTypeCode>
</dateType>
</CI_Date>
</date>
</CI_Citation>
</citation>
</MD_DataIdentification>
</MD_Metadata>
显示的输出看起来好像来自Saxon。就我个人而言,我认为它读起来相当不错。当然,您根本不需要缩进(在xsl:output
上设置indent="no"
)。
如果您确实在使用Saxon,您可以通过使用<xsl:output saxon:line-length="1000"/>
增加最大行长度来减少属性换行到新行的机会,例如:请注意,行数如此之长的文件可能会破坏一些文本编辑器。
http://www.saxonica.com/documentation/index.html#!扩展/输出附加/序列化参数