0

我无法从字符串创建 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 传递到样式表并将该字符串转换为节点集的简化。

4

1 回答 1

0

我确实在 .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 创建的节点集一样使用的节点集。

于 2019-09-03T21:44:38.173 回答