Xslt 使用“xsl:value of select”截断标记
当我执行以下xsl时,我得到的是一个截断的标记对,而不是完整的标记。请参见问题的结尾 原始代码: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: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>