【发布时间】:2021-02-12 11:53:28
【问题描述】:
在以下示例中,我们在 xslt 中硬编码了“LOC_NAME_CHART_NUM_ENG”元素,并尝试使用 xslt 1.0 实现自动化:
案例1:如果'<NOBJNM>'之前没有文字(即,在这种情况下,在 '<NOBJNM>' 之后可能是
应该是
凯库拉南防波堤
情况 2: 如果文本之前有 '<NOBJNM>'
应该是
凯库拉南防波堤头
输入 XML:
<?xml version="1.0" encoding="UTF-8"?>
<NM_LIGHT_LIST_RECORD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PRODUCT_REF>
<PRODUCTVER_ID>572902</PRODUCTVER_ID>
<UPDATE_KEY>4277</UPDATE_KEY>
<CONTRIBUTING_FEATURE_LIST>
<CONTRIBUTING_FEATURE_VERSION_ID>57509415</CONTRIBUTING_FEATURE_VERSION_ID>
<CONTRIBUTING_FEATURE_VERSION_ID>57508780</CONTRIBUTING_FEATURE_VERSION_ID>
</CONTRIBUTING_FEATURE_LIST>
</PRODUCT_REF>
<NATIONAL_NUMBER xsi:nil="true"/>
<INTERNATIONAL_NUMBER>4277</INTERNATIONAL_NUMBER>
<!--<LOC_NAME_CHART_NUM_ENG><NOBJNM>Kaikoura South Breakwater Head</LOC_NAME_CHART_NUM_ENG>-->
<LOC_NAME_CHART_NUM_ENG>Kaikōura South Breakwater Head<NOBJNM>Kaikoura South Breakwater Head</LOC_NAME_CHART_NUM_ENG>
<POSITION>
<LATITUDE>42 25.56</LATITUDE>
<LONGITUDE>173 40.85</LONGITUDE>
</POSITION>
<LIGHT_CHARACTERISTICS_ENG>Iso G 2s</LIGHT_CHARACTERISTICS_ENG>
<LUM_GEO_RANGE>6</LUM_GEO_RANGE>
<LIGHT_HEIGHT>6</LIGHT_HEIGHT>
<DESC_STRUCT_HEIGHT_ENG> Black and white Horizontal stripes, metal pole<p style="text-align:center;margin-top: 0px;margin-bottom: 2px;">3</p></DESC_STRUCT_HEIGHT_ENG>
<OBSERVATION_ENG>
<br/>
</OBSERVATION_ENG>
<NM_LIGHTS_OBMNZ>No</NM_LIGHTS_OBMNZ>
</NM_LIGHT_LIST_RECORD>
预期输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<table xmlns:gml="http://www.opengis.net/gml/3.2" style="width:100%;font-size:8pt;">
<tr style="vertical-align:text-top;">
<td style="width:10%;font-weight:bold;">4277</td>
<td style="width:20%;">Kaikōura South Breakwater Head</td>
<td style="width:14%;text-align:right;">42 25.56<br>173 40.85</td>
<td style="width:14%;padding-left:15px;">Iso G 2s</td>
<td style="width:5%;">6</td>
<td style="width:5%;">6</td>
<td style="width:20%;"> Black and white Horizontal stripes, metal pole
<p xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" style="text-align:center;margin-top: 0px;margin-bottom: 2px;">3</p>
</td>
<td style="width:20%;">
<OBSERVATION_ENG xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<br>
</OBSERVATION_ENG>
</td>
</tr>
</table>
XSLT 代码:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="html" encoding="UTF-8" indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:template match="/NM_LIGHT_LIST_RECORD">
<table style="width:100%;font-size:8pt;">
<tr style="vertical-align:text-top;">
<td style="width:10%;font-weight:bold;"><xsl:value-of select="INTERNATIONAL_NUMBER"/></td>
<td style="width:20%;">
<!--<xsl:copy-of select="LOC_NAME_CHART_NUM_ENG/node()"/>-->
<xsl:variable name="NOBJNM">
<xsl:copy-of select="LOC_NAME_CHART_NUM_ENG/node()"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="$NOBJNM = 'Kaikōura South Breakwater Head<NOBJNM>Kaikoura South Breakwater Head'">
<xsl:value-of select="'Kaikōura South Breakwater'"/>
</xsl:when>
<xsl:when test="$NOBJNM = 'Māpua Port Pile<NOBJNM>Mapua Port Pile'">
<xsl:value-of select="'Māpua Port Pile'"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$NOBJNM"/>
</xsl:otherwise>
</xsl:choose>
</td>
<td style="width:14%;text-align:right;">
<xsl:value-of select="translate(POSITION/LATITUDE,'NEWS','')"/>
<br/>
<xsl:value-of select="translate(POSITION/LONGITUDE,'NEWS','')"/>
</td>
<td style="width:14%;padding-left:15px;"><xsl:value-of select="LIGHT_CHARACTERISTICS_ENG"/></td>
<td style="width:5%;"><xsl:value-of select="LIGHT_HEIGHT"/></td>
<td style="width:5%;"><xsl:copy-of select="LUM_GEO_RANGE/node()"/></td>
<td style="width:20%;"><xsl:copy-of select="DESC_STRUCT_HEIGHT_ENG/node()"/>
<xsl:variable name="height" select="STRUCT_HEIGHT"/>
<xsl:if test="$height != ''"><p style="text-align:center;margin-top: 0px;margin-bottom: 2px;"><xsl:value-of select="$height"/></p></xsl:if>
</td>
<td style="width:20%;">
<xsl:copy-of select="OBSERVATION_ENG"></xsl:copy-of>
<xsl:choose>
<xsl:when test="NM_LIGHTS_STATUS='Temporary'">
<br/><strong> T </strong>
</xsl:when>
<xsl:when test="NM_LIGHTS_STATUS='Racon temporarily discontinued'">
<br/><strong> TR </strong>
</xsl:when>
<xsl:when test="NM_LIGHTS_STATUS='Preliminary'">
<br/><strong> P </strong>
</xsl:when>
<xsl:when test="NM_LIGHTS_STATUS='Temporarily discontinued (non-light AtoN)'">
<br/><strong> TD </strong>
</xsl:when>
<xsl:when test="NM_LIGHTS_STATUS='Temporarily extinguished (light AtoN)'">
<br/><strong> TE </strong>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<xsl:if test="NM_LIGHTS_STATUS != ''">
<strong><xsl:value-of select="../../../NM_YEAR_PUB"/></strong>
</xsl:if>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
标签: xml xslt xpath xslt-1.0 xquery