开发者

XSLT; parse escaped text to a node-set and extract subelements

开发者 https://www.devze.com 2022-12-30 19:36 出处:网络
I\'ve been fighting with this problem all day and am just about at my wit\'s end. I have an XML file in which certain portions of data are stored as escaped text but are themselves well-formed XML. I

I've been fighting with this problem all day and am just about at my wit's end.

I have an XML file in which certain portions of data are stored as escaped text but are themselves well-formed XML. I want to convert the whole hierarchy in this text node to a node-set and extract the data therein. No combination of variables and functions I can think of works.

The way I'd expect it to work would be:

<xsl:variable name="a" select="InnerXML">
<xsl:for-each select="exsl:node-set($a)/*">
    'do something
</xsl:for-each>

The input element InnerXML con开发者_开发百科tains text of the form

<root><elementa>text</elementa><elementb><elementc/><elementd>text</elementd></elementb></root>

but that doesn't really matter. I just want to navigate the xml like a normal node-set.

Where am I going wrong?


In case you can use Saxon 9.x, it provides the saxon:parse() extension function exactly for solving this task.


what I've done is had a msxsl script in the xslt ( this is in a windows .NET environment):

  <msxsl:script implements-prefix="cs" language="C#" >
    <![CDATA[
    public XPathNodeIterator parse(String strXML)
    {
      System.IO.StringReader rdr = new System.IO.StringReader(strXML);
      XPathDocument doc = new XPathDocument(rdr);
      XPathNavigator nav = doc.CreateNavigator();

      XPathExpression expr;
      expr = nav.Compile("/");

      XPathNodeIterator iterator = nav.Select(expr);

      return iterator;
    }
    ]]>
  </msxsl:script>

then you can call it like this:

<xsl:variable name="itemHtml" select="cs:parse(EscapedNode)" />

and that variable now contains xml you can iterate through

0

精彩评论

暂无评论...
验证码 换一张
取 消