XSLT:将文本添加到XML中的自关闭标记

时间:2013-07-26 13:04:16

标签: xslt

我正在尝试将文字添加到空/自闭标签。

我想将“< empty /> ”转换为“< empty> some text < / empty> ”。

这是我正在处理的xml的缩短版本:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<attr tag="00080090" vr="PN" pos="-1" name="Referring Physician's Name" vm="0" len="0"/>
</dataset>

我想得到这个结果:

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<attr tag="00080090" vr="PN" pos="-1" name="Referring Physician's Name" vm="0" len="0">this is the inserted text</attr>
</dataset>

但我最终得到了一个未经修改的xml。如果此标记没有文本,我的匹配似乎无效。如果已经存在一些文本,它会起作用,它会替换本案例中的文本,这对我来说很好。

我的XSL(T)看起来像这样:

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

<xsl:template match="node() | @*">
  <xsl:copy>
    <xsl:apply-templates select="node() | @*"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="attr[@tag='00080090']/text()">
  <xsl:text>this is the inserted text</xsl:text>
</xsl:template>

</xsl:stylesheet>

我使用http://xslttest.appspot.com

进行了测试

任何提示?

1 个答案:

答案 0 :(得分:3)

XSLT应该如下:

<?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"/>
    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="node() | @*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="attr[@tag='00080090']">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:text>this is the inserted text</xsl:text>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>