C# XSLT 扩展函数如何 return 一个 XML 片段被用作未转义的 XML?
How can a C# XSLT extension function return an XML fragment that gets used as unescaped XML?
我编写了一个使用 C# 扩展函数的 XSLT。该函数 returns 一个 XML 片段。像这样:
public string MyFunc(string input)
{
return "<thisIsXml/>";
}
我这样称呼它:
<value-of select="extensions:MyFunc(.)"/>
有效,但响应被转义了,所以最终结果如下:
<thisIsXml>
我不想要那个——我希望它作为 实际、未转义的 XML 注入。
可能吗?
(这是 C#,因此仅限 XSLT 1.0。)
解决方案似乎是 return 一个 XPathNavigator 对象,而不是一个字符串。您可以从片段中形成这些。我在我的扩展对象中写了这个效用函数:
private XPathNavigator GetFragment(string input)
{
var settings = new XmlReaderSettings()
{
ConformanceLevel = ConformanceLevel.Fragment
};
var doc = new XPathDocument(XmlReader.Create(new StringReader(input), settings));
return doc.CreateNavigator();
}
然后我在 return 之前通过该函数将我的扩展函数重写为 运行 它的字符串。
在 C# 中构造一个 System.Xml.XmlDocument 或 System.Xml.XPath.XPathDocument,并从该 XmlDocument 或 XPathDocument 构造一个 return 一个 XPathNavigator
。当然,在 XSLT 中,您还需要 <xsl:copy-of select="extension:MyFunc(.)"/>
.
我编写了一个使用 C# 扩展函数的 XSLT。该函数 returns 一个 XML 片段。像这样:
public string MyFunc(string input)
{
return "<thisIsXml/>";
}
我这样称呼它:
<value-of select="extensions:MyFunc(.)"/>
有效,但响应被转义了,所以最终结果如下:
<thisIsXml>
我不想要那个——我希望它作为 实际、未转义的 XML 注入。 可能吗?
(这是 C#,因此仅限 XSLT 1.0。)
解决方案似乎是 return 一个 XPathNavigator 对象,而不是一个字符串。您可以从片段中形成这些。我在我的扩展对象中写了这个效用函数:
private XPathNavigator GetFragment(string input)
{
var settings = new XmlReaderSettings()
{
ConformanceLevel = ConformanceLevel.Fragment
};
var doc = new XPathDocument(XmlReader.Create(new StringReader(input), settings));
return doc.CreateNavigator();
}
然后我在 return 之前通过该函数将我的扩展函数重写为 运行 它的字符串。
在 C# 中构造一个 System.Xml.XmlDocument 或 System.Xml.XPath.XPathDocument,并从该 XmlDocument 或 XPathDocument 构造一个 return 一个 XPathNavigator
。当然,在 XSLT 中,您还需要 <xsl:copy-of select="extension:MyFunc(.)"/>
.