XSLT将一段xml传递给custommethod

问题描述

| 我对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#代码将数据作为节点接收,然后从那里进行序列化-假设处理不能在树级别上成为节点。