XSL用插入符替换空格

时间:2014-03-12 18:50:03

标签: xslt replace spaces

更新代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="no"/>
  <!-- overwritten by application with actual values -->
  <xsl:param name="calling" select="'SAMPLE_MOD'"/>
  <xsl:param name="called" select="'SERVER1'"/>
  <xsl:param name="date" select="'20051206'"/>
  <xsl:param name="time" select="'115600.000'"/>
  <xsl:param name="PatName" select="attr[@tag='00100010']"/>
  <xsl:template match="/dataset">
     <dataset>
     <xsl:variable name="PerfProcStepDesc" select="attr[@tag='00400254']"/>
     <xsl:variable name="StudyDesc" select="attr[@tag='00081030']"/>
       <xsl:if test="string-length($StudyDesc)=0">
         <xsl:if test="$PerfProcStepDesc">
            <!-- (0008,1030) Study Description -->
           <attr tag="00081030" vr="LO">
             <xsl:value-of select="$PerfProcStepDesc"/>
           </attr>
         </xsl:if>
       </xsl:if>
     </dataset>
     <dataset>
        <xsl:variable name="caret" select="'^'"/>
        <xsl:if test="contains($PatName, ' ')">
            <xsl:value-of select="translate($PatName, ' ','^')"/>
        </xsl:if>   
     </dataset>
  </xsl:template>
</xsl:stylesheet>

变量&#39; PatName&#39;可能会出现“DOE JOHN&#39;我需要把它转变为“DOE ^ JOHN&#39;名称中也可能有多个空格,所以我希望所有的空格都可以。改为插入符号并保留其当前位置。

我需要使用名称中的逗号。

目前输出就像它进入时一样,所以我的测试不能正常工作。

谢谢你的期待!

编辑#2:

我已经更改了我的代码以应用身份转换(希望我说得对!)我还有处理我的XSL样式表时的XSL输入和XSL输出。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" indent="no"/>
  <!-- overwritten by application with actual values -->
  <xsl:param name="calling" select="'SAMPLE_MOD'"/>
  <xsl:param name="called" select="'SERVER1'"/>
  <xsl:param name="date" select="'20051206'"/>
  <xsl:param name="time" select="'115600.000'"/>
  <xsl:param name="PatName" select="attr[@tag='00100010']"/>
<!-- IdentityTransform -->
<xsl:template match="/ | @* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
</xsl:template>
  <xsl:template match="/dataset">
     <dataset>
     <xsl:variable name="PerfProcStepDesc" select="attr[@tag='00400254']"/>
     <xsl:variable name="StudyDesc" select="attr[@tag='00081030']"/>
       <xsl:if test="string-length($StudyDesc)=0">
         <xsl:if test="$PerfProcStepDesc">
            <!-- (0008,1030) Study Description -->
           <attr tag="00081030" vr="LO">
             <xsl:value-of select="$PerfProcStepDesc"/>
           </attr>
         </xsl:if>
       </xsl:if>
     </dataset>
     <dataset>
        <xsl:variable name="caret" select="'^'"/>
        <xsl:if test="contains($PatName, ' ')">
            <xsl:value-of select="translate($PatName, ' ','^')"/>
        </xsl:if>   
     </dataset>
  </xsl:template>
</xsl:stylesheet>

XSL输入here

XSL输出如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataset/>

在XSL输入中,&#39;患者姓名&#39;有'SMPTE模式&#39;我期待&#39; SMPTE ^ PATTERN&#39;。

我希望这有一些帮助,我希望我的身份变换器是正确的。

感谢每个人的时间

3 个答案:

答案 0 :(得分:3)

您可以使用翻译功能。

<xsl:value-of select="translate($PatName, ' ','^')"/>

如果要用插入符替换逗号和空格,请使用:

<xsl:value-of select="translate($PatName, ' ,','^^')"/>

答案 1 :(得分:0)

这不是答案,但我需要发布一些代码。

请将以下样式表应用于您的(原始)输入并报告结果:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:variable name="patName" select="/dataset/attr[@tag='00100010']" />

<xsl:template match="/">
    <tests>
        <value><xsl:value-of select="$patName" /></value>
        <contains><xsl:value-of select="contains($patName, '&#32;')" /></contains>
        <trans><xsl:value-of select="translate($patName, '&#32;' , '^')" /></trans>
    </tests>
</xsl:template>

</xsl:stylesheet> 

答案 2 :(得分:0)

变化

<xsl:param name="PatName" select="attr[@tag='00100010']"/>

<xsl:param name="PatName" select="dataset/attr[@tag='00100010']"/>

并更改

<xsl:value-of select="translate($PatName, ' ','^')"/>

<xsl:value-of select="translate($PatName, ' ,','^^')"/>