如何从字符串创建 XSL 节点集



我无法从字符串创建 XSL 节点集。 我可以从结果树片段创建一个节点集。 此样式表显示了这两种尝试。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="rtf">
<root>
<child>
</child>
</root>
</xsl:variable>
<xsl:variable name="rtfNs" select="exsl:node-set($rtf)" />
<xsl:variable name="str" select="'&lt;root&gt;&lt;child&gt;&lt;/child&gt;&lt;/root&gt;'" />
<xsl:variable name="strNs" select="exsl:node-set($str)" />
<xsl:template match="/">
<xsl:copy-of select="$rtfNs" />
<xsl:copy-of select="$rtfNs/root/child" />
<xsl:copy-of select="$strNs" />
</xsl:template>
</xsl:stylesheet>

生产

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:exsl="http://exslt.org/common">
<child/>
</root>
<child xmlns:exsl="http://exslt.org/common"/>&lt;root&gt;&lt;child&gt;&lt;/child&gt;&lt;/root&gt;

该代码显示可以从 RTF 创建节点集,并在选择属性中使用。 尝试从字符串创建节点集会导致带有嵌入实体(即<和>(的字符串。 如果不使用实体,则无法定义字符串。 此问题简化了尝试将外部字符串从 .NET System.Xml.Xsl 传递到样式表中并将该字符串转换为节点集。

我确实在 .NET 端得到了一个解决方案,但也想获得 XSL 端的响应......

Dim objXmlDoc As System.Xml.XmlDocument = New System.Xml.XmlDocument()
objXmlDoc.LoadXml("<root><child></child></root>")
Dim objXmlNav As System.Xml.XPath.XPathNavigator = objXmlDoc.CreateNavigator()
objXmlNav.MoveToRoot()
Dim objValidationArgList As New System.Xml.Xsl.XsltArgumentList
objValidationArgList.AddParam("test", "", objXmlNav)

这将一个 RTF 传递到样式表中,当使用 node-set($test( 处理时,会产生一个节点集,该节点集可以像从内部(xsl:variable(RTF 创建的节点集一样使用。

最新更新