问题描述
|
我对XSLT有一个小问题,我直到最近才开始使用xslt。
因此,问题是我需要使用自定义方法提供一个与模板匹配的xml,但是问题是,我给出的是一个字符串,但是它确实已经有标签了:
所以如果我的xml看起来像这样的例子:
<a>hi</a>
<a>bye</b>
我只收到包含以下内容的字符串:\“ hi bye \”
因此,我需要给出的不仅仅是节点的值/文本,而是整个节点的标签,属性和元素等。
我的xslt看起来像这样:
<xsl:template match=\"SpecialNode\">
<xsl:value-of select=\"CustomMethod:Handler(node()[*],@name)\"/>
</xsl:template>
但是无论我尝试了什么(例如./node()
或descendant::node()
或*
等),我总是得到不带xml标签的字符串:(
但是我需要将这样的内容以字符串形式传递给我的方法。
<a>hi</a><a>bye</a>
解决方法
如果您只想获取标签名称,请尝试
<xsl:template match=\"SpecialNode\">
<xsl:value-of select=\"CustomMethod:Handler(name(.))\"/>
</xsl:template>
如果您想要整个元素以及标签名称,请尝试
<xsl:template match=\"SpecialNode\">
<xsl:value-of select=\"CustomMethod:Handler(.,name(.))\"/>
</xsl:template>
,采用:
CustomMethod:Handler(.)
,您的XSLT样式表正在处理一棵节点树,并且您希望外部c#(?)代码看到包含尖括号的词法化XML。因此,需要沿着这条线的某个位置将节点树序列化为词法XML。魔术不会通过函数调用完成隐式转换。最好让C#代码将数据作为节点接收,然后从那里进行序列化-假设处理不能在树级别上成为节点。