concat删除xml标签

时间:2017-09-15 16:02:42

标签: xml xslt

我正在尝试使用XSL中的concat函数将一些数据连接在一起。大多数项目都是简单的字符串值,但其中一个项目是一些XML的片段。我所看到的是,在将数据连接在一起时,XML标记正在被删除。这是预期的吗?有办法解决这个问题吗?

下面是我的汇总声明,我正在输入一个变量:

<xsl:variable name="hashKeyString"><xsl:copy-of select="concat(14,1269,Wire,ABC,<tag1>123</tag1>,XYZ)"/></xsl:variable>

当我查看变量内容时,我看到“141269WireABC123XYZ”。标签消失了。

任何帮助或见解都将不胜感激。

更新:正如许多人所说,这个例子不是很好。我急于把它放进去,我可能没有给出一个很好的例子。上面连接的示例中列出的值实际上是变量中的数据。我的主要问题是其中一个变量包含XML。如果我查看变量内容,标签就在那里。在concat语句中使用变量后,标签不再存在。我正在寻找一种方法来保持XML标记作为数据串联的一部分。我在concat语句之后看到的内容实际上是以前的XML值“结果”。

2 个答案:

答案 0 :(得分:2)

您希望在变量中添加混合内容似乎很奇怪,但如果您确实需要它,请尝试:

<xsl:value-of select="concat(14,1269,Wire,ABC)"/>
<tag1>123</tag1>
<xsl:value-of select="XYZ"/>

请注意,concat(14,1269)始终为141269,因此第一个逗号是多余的。

答案 1 :(得分:1)

虽然我怀疑您的实际任务涉及连接硬编码值,但可以实现所需的结果,将您的值放在引号中并用其字符值替换违规实体:

<xsl:value-of select="concat('14','1269','Wire','ABC','&#60;tag1&#62;123&#60;/tag1&#62;','XYZ')" />

然而,这仅仅是因为它可以完成......你的实际任务肯定需要一个像@michael所呈现的解决方案。