Xml 在xsl中使用concat和的副本
我有xsl代码和方法的副本,该方法按原样复制xml标记 我想用一个引号来表示这个值Xml 在xsl中使用concat和的副本,xml,xslt,Xml,Xslt,我有xsl代码和方法的副本,该方法按原样复制xml标记 我想用一个引号来表示这个值 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://www.fo.org/&q
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:foo="http://www.fo.org/" xmlns:bar="http://www.bar.org">
<xsl:template match="/">
<xsl:copy-of xml:id="id_94" select="concat('`',/TransmissionHeader ,'`')"/>
</xsl:template>
</xsl:stylesheet>
但我希望输出是
`<TransmissionHeader>hello</TransmissionHeader>`
你好`
如何做到这一点?这是一个有趣的用法。 我希望它需要node()类型的输入才能正常工作。 在您的例子中,您正在保存“嘿,为我复制这个字符串”,因为concat操作的返回类型是字符串。如果在需要字符串的位置输入node()类型值,它将始终将给定的xpath转换为xpath/text(),并只选择其中的文本。(仅凭经验,并非100%确定) 您的问题应该通过以下方式解决:
<xsl:copy-of select=". | @*"/>
的副本生成深度副本,因此其结构中的每个元素都将被复制。法线只是当前元素的一个副本。由于节点内的文本也被视为节点(),因此它也将复制它。可以使用以下方法生成预期输出:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:text>'</xsl:text>
<xsl:copy-of select="TransmissionHeader"/>
<xsl:text>'</xsl:text>
</xsl:template>
</xsl:stylesheet>
'
'
但是,正如我在对您的问题的评论中所指出的,结果没有多大意义。但是我仍然需要在xml标记中加上“`”,而这个没有解决问题。我尝试了什么是您的输出方法?如果是文本,那么为什么需要标签?如果是XML,那么为什么需要引号?
<xsl:copy-of select=". | @*"/>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<xsl:text>'</xsl:text>
<xsl:copy-of select="TransmissionHeader"/>
<xsl:text>'</xsl:text>
</xsl:template>
</xsl:stylesheet>