XSL使用插入符替换空格

3

更新的代码:

    <?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>

变量'PatName'可能会出现为'DOE JOHN',我需要将其转换为'DOE^JOHN'。名称中也可能有多个空格,因此我希望所有的“空格”都被更改为插入符号,并保留它们在名称中的当前位置。
我需要对名称中的逗号执行相同的操作。
目前输出的结果与输入的内容完全相同,因此我的测试未能按照预期工作。
感谢您的关注!
编辑#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输入 链接

XSL输出如下:

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

在XSL输入中,'Patient Name'中有'SMPTE PATTERN',我期望的是'SMPTE^PATTERN'。
希望这对你有所帮助,同时我希望我的身份转换器是正确的。
感谢大家的时间。

你可能想把 <xsl:template ...> 的开始标签也加进去。 - deanosaur
抱歉,我忘记发布了,它在我的样式表中 - 谢谢! - Docjay
请尝试在您的原始输入上使用我在下面答案中发布的样式表。 - michael.hor257k
3个回答

6
你可以使用翻译函数。
<xsl:value-of select="translate($PatName, ' ', '^')"/>

如果您想用插入符号替换逗号和空格,可以使用以下代码:

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

我尝试了你的第一个例子,输出没有改变,所以我猜测测试中没有捕捉到“空格”? - Docjay
你完全不需要使用xsl:choose,可以使用以下代码: <dataset> <xsl:value-of select="translate($PatName, ' ,','^^')"/> </dataset> - Lingamurthy CS
1
@Docjay 你确定那些是空格字符而不是其他的空白字符,比如说不间断空格吗? - michael.hor257k
我已经删除了“xsl:choose”,但它仍然没有捕获$PatName中的空格。也许它们不是空格字符。 - Docjay
抱歉,我没有XML文件 - 我们使用的软件只有.xsl样式表,转换器在JBOSS中完成其余工作。我已经更新了上面的代码,并添加了样式表。很抱歉之前的代码不完整。 - Docjay
显示剩余7条评论

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> 

我使用了您上面提供的样式表,并将其应用于我的原始输入。这是我的输入链接(http://www.pastebin.ca/2658482),这是输出结果:<?xml version="1.0" encoding="UTF-8"?> <dataset/> -对于格式问题表示抱歉。 - Docjay
@Docjay,这是不可能的。你无法在任何输入上使用我的样式表来获得这个结果。 - michael.hor257k
非常抱歉 - 那只能是输出时强制执行的内容(什么也没有)。我正在尝试找出在JBOSS 4.2.3中查看转换器的确切输出位置。非常感谢您在此方面的耐心和帮助,请不要对我产生太多的反感!哈哈 - Docjay

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, ' ,','^^')"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接