在 xslt 转换期间,我试图从客户编号中清除字符串和特殊,但它不起作用。我需要从数字中删除 c: 或 s: 。谢谢:)
XML 文件 1
<Data>
<Request>
<CustNo>c:222</CustNo>
</Request>
</Data>
XML 文件 2
<Data>
<Request>
<CustNo>s:333</CustNo>
</Request>
</Data>
XSLT
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" >
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:template match="Request" >
<TestPayment>
<Transactions>
<Transaction custno="{CustNo}" >
</Transaction>
</Transactions>
</TestPayment>
</xsl:template>
<xsl:template match="Request/CustNo">
<xsl:value-of select="regex=(^c:[a-zA-Z0-9]*$,^s:[a-zA-Z0-9]*$ )"/>
</xsl:template>
</xsl:template>
</xsl:stylesheet>
XML 文件 1 的结果:
<?xml version="1.0" encoding="utf-8"?>
<TestPayment>
<Transactions>
<Transaction custno="222">
</Transaction>
</Transactions>
</TestPayment>
XML 文件 2 的结果:
<?xml version="1.0" encoding="utf-8"?>
<TestPayment>
<Transactions>
<Transaction custno="333">
</Transaction>
</Transactions>
</TestPayment>
在 XSLT 2.0 中,您可以简单地执行以下操作:
replace(CustNo, 'D', '')
以删除任何非数字字符。
即使在 XSLT 1.0 中,您也可以使用:
substring-after(CustNo, ':')
以适应您的两个示例。
你为什么不尝试双翻译函数呢?
<Transaction custno="{translate(CustNo, translate(CustNo, '0123456789', ''), '')}" >