Xslt 使用“xsl:value of select”截断标记

Xslt 使用“xsl:value of select”截断标记,xslt,Xslt,当我执行以下xsl时,我得到的是一个截断的标记对,而不是完整的标记。请参见问题的结尾 原始代码: <xsl:template match="node()\@*"> <xsl:copy> <xsl:apply-templates select="node()\@*"/> </xsl:copy> </xsl:template> <xsl:template match="CONFIG"> <xsl:choose&g

当我执行以下xsl时,我得到的是一个截断的标记对,而不是完整的标记。请参见问题的结尾

原始代码:

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

<xsl:template match="CONFIG">
<xsl:choose>
    <xsl:when test=" ../ID/.='2'">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:text>STANDARD</xsl:text>
        </xsl:copy>
    </xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="NAME">
<xsl:choose>
    <xsl:when test=" ../ID/.='2'">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:text>DEVELOPMENT</xsl:text>
        </xsl:copy>
    </xsl:when>
</xsl:choose>
</xsl:template>
修改代码:

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

<xsl:template match="CONFIG">
<xsl:choose>
    <xsl:when test=" ../ID/.='2'">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:text>STD</xsl:text>
        </xsl:copy>
        <xsl:attribute name="KEY">
            <xsl:value-of select='0'/>
        <xsl:attribute>
        <xsl:attribute name="NAME">
            <xsl:value-of select="'DEVELOPMENT'"/>
        <xsl:attribute>
    </xsl:when>
</xsl:choose>
</xsl:template>
所以,我的想法不是将CONFIG设置为STANDARD,而是尝试设置KEY。 我没有两次处理同一个查询,而是将NAME的设置向上移动

按键设置正确;但是我得到了截短的 而不是 发展


我显然不是XML专家,只是在做一些维护。欢迎提供任何线索或建议。

元素内容输出后,您不能创建属性

向上移动


我怀疑反斜杠是对|的拼写错误,似乎我知道的比我想象的还要少。我听到了你说的“不能创建属性”,这很有帮助,因为我没有尝试创建,这是一个修改。我真正想做的是匹配ID,并更改ID、配置和名称。因为这是维护,所以我要下注,第三次重复匹配/测试逻辑,这似乎是可行的。这让我很恼火,因为看起来我应该只配一次。是的,\确实是一个|我不能从这个系统中剪切和粘贴,所以我必须转录。感谢您的帮助。使用创建属性会导致覆盖任何具有该名称的现有属性。实际上,这是一个修改,就像你看起来想要的那样。如果答案已经解决了你的问题,别忘了把它标记为已接受。它表明它确实有效。问题是我使用的xml编辑器XMLSpy有一个内置引擎,允许MS解析器。由于某些原因,内置解析器没有显示正确的转换结果。看起来末端标签不在那里,但它在那里。6小时枪毙;还有一些我不会再更新的乱七八糟的代码。但这也是信息的来源。
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="CONFIG[../ID = '2']">
    <xsl:copy>
        <xsl:apply-templates select="@*" />
        <xsl:attribute name="KEY">0<xsl:attribute>
        <xsl:attribute name="NAME">DEVELOPMENT<xsl:attribute>
        <xsl:text>STD</xsl:text>
    </xsl:copy>
</xsl:template>