当x <- "[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
x <- gsub("\\[[^]\r\n]*(?:]|\\R)", " ", x, perl=TRUE)
x
## => [1] " \r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n \r\n BOYCE: Boyce here.\r\r\n"
等于&#34;服务3&#34;时,我需要获取servtypes
和servamt
值。我使用了XSL逻辑,它以某种方式得到了服务3&#34;及其相应的金额。
XSL代码:
servtypes
XML示例
<xsl:for-each select="service">
<fo:table-row>
<fo:table-cell padding-left="14pt" display-align="center">
<fo:block>
<xsl:if test="servtypes='Service 3'">
<xsl:value-of select="servtypes"/>
</xsl:if>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="left" >
<fo:block>
<xsl:if test="servtypes='Service 3'">
<xsl:value-of select="servamt"/>
</xsl:if>
</fo:block>
</fo:table-cell>
<fo:table-cell padding-left="14pt" display-align="center">
<fo:block>
<fo:leader/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
问题在于,无论何时循环遍历不同的服务值,它还会为每个不匹配的服务创建表行,并且单元格包含空白值,请参见下表。
如何防止创建空白行和单元格,只创建一个其值仅与Service 3相匹配的表?
<charges>
<fees>25</fees>
<desc>Description</desc>
<service>
<servtypes>Service 1</servtypes>
<servamt>150</servamt>
</service>
<service>
<servtypes>Service 2</sertypes>
<servamt>10</servamt>
</service>
<service>
<servtypes>Service 3</servtypes>
<servamt>150</servamt>
</service>
<charges>
&#13;
我能够让这项工作检查下面的xsl。
的解决方案
<table>
<tr>
<td>Blank</td>
<td>Blank</td>
<td>Blank</td>
</tr>
<tr>
<td>Blank</td>
<td>Blank</td>
<td>Blank</td>
</tr>
<tr>
<td>Service 3</td>
<td>Service Value</td>
<td>Service</td>
</tr>
</table>
答案 0 :(得分:2)
解决方案很简单:与您不需要的不匹配!
在下面的代码中,我将匹配表达式放在xsl:template match=""
规则中,并将text()
的其余部分排除在匹配之外。我还删除了xsl:if
s。
<xsl:template match="text()" />
<xsl:template match="/charges">
<xsl:apply-templates select="service" />
</xsl:template>
<xsl:template match="service[servtypes='Service 3']">
<fo:table-row>
<fo:table-cell padding-left="14pt" display-align="center">
<fo:block>
<xsl:value-of select="servtypes"/>
</fo:block>
</fo:table-cell>
<fo:table-cell text-align="left" >
<fo:block>
<xsl:value-of select="servamt"/>
</fo:block>
</fo:table-cell>
<fo:table-cell padding-left="14pt" display-align="center">
<fo:block>
<fo:leader/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>