XSL 1.0比较并替换另一个xml字符串中的xml元素文本
我有这样一个xml表:XSL 1.0比较并替换另一个xml字符串中的xml元素文本,xml,xslt,xml-parsing,xslt-2.0,transformation,Xml,Xslt,Xml Parsing,Xslt 2.0,Transformation,我有这样一个xml表: <tr> <td><font face="Calibri">Tank CIP warning interval (Hours)</font></td> <td><font face="Calibri">||MIN_CIP_EXPIRE_TIME||</font></td> <td><font face="Calibri"&g
<tr>
<td><font face="Calibri">Tank CIP warning interval (Hours)</font></td>
<td><font face="Calibri">||MIN_CIP_EXPIRE_TIME||</font></td>
<td><font face="Calibri">CIP Check - Tank Filter</font></td>
<td><font face="Calibri">Equipment</font></td>
<td><font face="Calibri">True</font></td>
</tr>
<tr>
<td><font face="Calibri">Vent Filter Material ID</font></td>
<td><font face="Calibri">||MM_EXPECTED_FILTER_MATL_ID_01||</font></td>
<td><font face="Calibri">Scan/Install/Consume Vent Filters</font></td>
<td><font face="Calibri">Materials</font></td>
<td><font face="Calibri">False</font></td>
</tr>
储罐CIP警告间隔(小时)
||最小CIP到期时间||
CIP检查-油箱过滤器
设备
符合事实的
排气过滤材料ID
||MM_预期_过滤器_材料_ID_01||
扫描/安装/使用通风过滤器
材料
错误的
我必须通过比较标记名,将整个xml中的第三个元素文本替换为以下xml字符串中的“步骤引用”
<Data>
<row>
<BoPName>OP_R_CFG_DEFINED_WEIGH_SEQUENCE</BoPName>
<TagName>||MIN_CIP_EXPIRE_TIME||</TagName>
<StepReference>Calculate Expiry</StepReference>
</row>
<row>
<BoPName>OP_R_CFG_FIRST_ADD_EXP_INTERVAL</BoPName>
<TagName>||MM_EXPECTED_FILTER_MATL_ID_01||</TagName>
<StepReference>Scan Material</StepReference>
</row>
<Data>
OP_R_CFG_定义的_加权_序列
||最小CIP到期时间||
计算到期日
OP_R_CFG_FIRST_ADD_EXP_INTERVAL
||MM_预期_过滤器_材料_ID_01||
扫描材料
CIP检查油箱过滤器必须更换为计算到期时间
假设您想要XSLT1.0而不是2.0,那么
<table>
<tr>
<td><font face="Calibri">Tank CIP warning interval (Hours)</font></td>
<td><font face="Calibri">||MIN_CIP_EXPIRE_TIME||</font></td>
<td><font face="Calibri">CIP Check - Tank Filter</font></td>
<td><font face="Calibri">Equipment</font></td>
<td><font face="Calibri">True</font></td>
</tr>
<tr>
<td><font face="Calibri">Vent Filter Material ID</font></td>
<td><font face="Calibri">||MM_EXPECTED_FILTER_MATL_ID_01||</font></td>
<td><font face="Calibri">Scan/Install/Consume Vent Filters</font></td>
<td><font face="Calibri">Materials</font></td>
<td><font face="Calibri">False</font></td>
</tr>
</table>
您可以构造一个键查找,例如
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="data" select="document('tab2.xml')"/>
<xsl:key name="k" match="StepReference" use="../TagName"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="td/font/text()">
<xsl:variable name="here" select="."/>
<xsl:variable name="tn" select="../../preceding-sibling::*[1]/font"/>
<xsl:for-each select="$data">
<xsl:choose>
<xsl:when test="key('k',$tn)">
<xsl:value-of select="key('k',$tn)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$here"/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
制作:
$ xsltproc tab.xsl tab.xml
<?xml version="1.0"?>
<table>
<tr>
<td><font face="Calibri">Tank CIP warning interval (Hours)</font></td>
<td><font face="Calibri">||MIN_CIP_EXPIRE_TIME||</font></td>
<td><font face="Calibri">Calculate Expiry</font></td>
<td><font face="Calibri">Equipment</font></td>
<td><font face="Calibri">True</font></td>
</tr>
<tr>
<td><font face="Calibri">Vent Filter Material ID</font></td>
<td><font face="Calibri">||MM_EXPECTED_FILTER_MATL_ID_01||</font></td>
<td><font face="Calibri">Scan Material</font></td>
<td><font face="Calibri">Materials</font></td>
<td><font face="Calibri">False</font></td>
</tr>
</table>
$xsltproc tab.xsl tab.xml
储罐CIP警告间隔(小时)
||最小CIP到期时间||
计算到期日
设备
符合事实的
排气过滤材料ID
||MM_预期_过滤器_材料_ID_01||
扫描材料
材料
错误的
您已经标记了此xslt-2,但将xslt 1放在标题中,您想要哪个?
$ xsltproc tab.xsl tab.xml
<?xml version="1.0"?>
<table>
<tr>
<td><font face="Calibri">Tank CIP warning interval (Hours)</font></td>
<td><font face="Calibri">||MIN_CIP_EXPIRE_TIME||</font></td>
<td><font face="Calibri">Calculate Expiry</font></td>
<td><font face="Calibri">Equipment</font></td>
<td><font face="Calibri">True</font></td>
</tr>
<tr>
<td><font face="Calibri">Vent Filter Material ID</font></td>
<td><font face="Calibri">||MM_EXPECTED_FILTER_MATL_ID_01||</font></td>
<td><font face="Calibri">Scan Material</font></td>
<td><font face="Calibri">Materials</font></td>
<td><font face="Calibri">False</font></td>
</tr>
</table>