问题类似于我原来的问题[这里]。1
我原来的问题是我需要将每两位数字连字符插入七位数字。现在我需要通过添加一个前导'0'将一个六位数字变成七位数字,然后我需要每两位数字连字一次,就像之前一样。
这是我的代码,我认为我很接近但不完全相同。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml"/>
<xsl:decimal-format name="dashes" grouping-separator='-'/>
<xsl:template match="/dataset">
<dataset>
<!-- Nullify (0040,A043) Concept Name Code Sequence -->
<attr tag="0040A043" vr="SQ"/>
<attr tag="00100021" vr="LO">HOSP</attr>
</dataset>
<dataset>
<!-- for when the leading "0" is dropped from the PID making it six digits long -->
<xsl:variable name="modPatientID" select="attr[@tag='00100020']"/>
<xsl:variable name="AddZero" select="'0'"/>
<xsl:variable name="Station" select="attr[@tag='00081010']"/>
<!-- (0008,1010) Station_Name -->
<xsl:if test="string-length($modPatientID)=6">
<xsl:if test="contains($Station,'J')">
<attr tag="00100020" vr="LO">
<xsl:value-of select="concat(
$AddZero, substring($modPatientID, 1, 2), '-',
substring($modPatientID, 3, 2), '-',
substring($modPatientID, 5, 2), '-',
substring($modPatientID, 7)
)"/>
</attr>
</xsl:if>
</xsl:if>
</dataset>
</xsl:template>
</xsl:stylesheet>
我是否应该使用上面创建的名为“AddZero”的变量名?
答案 0 :(得分:1)
我当然不认为需要一个变量来保存'0'字符串....看起来你正在制作012-34-56-7,这肯定不是你所说的你想要,特别是因为7将会失踪。尝试
<xsl:value-of select="concat(
'0', substring($modPatientID, 1, 1), '-',
substring($modPatientID, 2, 2), '-',
substring($modPatientID, 4, 2), '-',
substring($modPatientID, 6)
)"/>
或者,要使用您已经提出的格式,请在格式化之前添加零前缀:
<xsl:variable name="paddedToSeven" select="concat('0',$modPatientID)"/>
<xsl:value-of select="concat(
substring($paddedToSeven, 1, 2), '-',
substring($paddedToSeven, 3, 2), '-',
substring($paddedToSeven, 5, 2), '-',
substring($paddedToSeven, 7)
)"/>
答案 1 :(得分:0)
您的评论说:
当从PID中删除前导“0”时使其为6位数 长
恕我直言,如果可以删除前导“0”,那么也可以删除前导“00” - 依此类推。因此,您应该将字符串填充回7位动态:
<xsl:variable name="pID" select="substring(concat('0000000', $modPatientID), 1 + string-length($modPatientID))" />
然后使用:
<xsl:value-of select="concat(
substring($pID, 1, 2), '-',
substring($pID, 3, 2), '-' ,
substring($pID, 5, 2), '-' ,
substring($pID, 7)
)"/>
答案 2 :(得分:0)
不久前做过类似的事情,你可以用format-number做同样的事情:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="1.0">
<xsl:decimal-format grouping-separator="-" name="hyphenFormatting"/>
<xsl:template match="/">
<xsl:value-of select="format-number(123456,'00-00-00-0','hyphenFormatting')"/>
</xsl:template>
</xsl:stylesheet>
这将输出:
01-23-45-6