Matrix transposition in XSLT -


I am trying to get to this kind of input:

  & lt; Col title = "one" & gt; & Lt; Cell & gt; & Lt; / Cell & gt; & Lt; Cell & gt; B & lt; / Cell & gt; & Lt; Cell & gt; C & lt; / Cell & gt; & Lt; Cell & gt; D & lt; / Cell & gt; & Lt; / Col & gt; & Lt; Call title = "two" & gt; & Lt; Cell & gt; E & lt; / Cell & gt; & Lt; Cell & gt; F & lt; / Cell & gt; & Lt; Cell & gt; G & lt; / Cell & gt; & Lt; / Col & gt;  

... with this XSLT on this HTML output:

  & lt; Table & gt; & Lt; TR & gt; & Lt; Th & gt; A & lt; / Th & gt; & Lt; Th & gt; Two & lt; / Th & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; & Lt; / TD & gt; & Lt; TD & gt; E & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; B & lt; / TD & gt; & Lt; TD & gt; F & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; C & lt; / TD & gt; & Lt; TD & gt; G & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; D & lt; / TD & gt; & Lt; / TR & gt; & Lt; / Table & gt;  

In other words, I want to transfer a matrix. I could not find an easy way to do this; maybe not, I think; How about a complex one? While searching on Google, I get a signal that one way to solve it was through recursion. Any thoughts appreciated.

A possibility & lt; Col & gt; With most cells and then in the nested loop, repeat on them. It guarantees the structurally valid HTML table generation.

  & lt ;! - This variable is the longest & lt; Col & gt; - & gt; & Lt; Xsl: variable name = "vMaxColId" & gt; & Lt; Xsl: each selection = "/ root / call" & gt; & Lt; Xsl: Select Sort = "Count (Cell)" Data-Type = "Number" Order = "descending" /> & Lt; Xsl: if test = "position () = 1" & gt; & Lt; Xsl: Select Value = "Generate-ID ()" /> & Lt; / XSL: If & gt; & Lt; / XSL: for-each & gt; & Lt; / XSL: variable & gt; & Lt ;! - And it chooses the children who & lt; Col & gt; To move later - & gt; & Lt; Xsl: variable name = "viter" = "/ root / call [generate-id () = $ vMaxColId] / cell" /> & Lt; Xsl: template match = "root" & gt; & Lt; Xsl: variable name = "column" select = "call" /> & Lt; Table & gt; & Lt ;! - Output & lt; Th & gt; S - & gt; & Lt; TR & gt; & Lt; Xsl: apply-select template = "$ column / title @" /> & Lt; / TR & gt; & Lt ;! - As many & lt; Tr & gt; S because & lt; Cell & gt; S longest & lt; Col & gt; - & gt; & Lt; Xsl: each-select = "$ vIter" & gt; & Lt; Xsl: variable name = "pos" Select = "position ()" /> & Lt; TR & gt; & Lt ;! - As many & lt; Td> As there are & lt; Col & gt; S - & gt; & Lt; Xsl: each selection = "$ column" & gt; & Lt; TD & gt; & Lt; Xsl: Select the value = "cell [position () = $ pos]" /> & Lt; / TD & gt; & Lt; / XSL: for-each & gt; & Lt; / TR & gt; & Lt; / XSL: for-each & gt; & Lt; / Table & gt; & Lt; / XSL: Templates & gt; & Lt; Xsl: template match = "call / @ title" & gt; & Lt; Th & gt; & Lt; Xsl: value selection = "." / & Gt; & Lt; / Th & gt; & Lt; / XSL: Templates & gt;  

applicable to

  & lt; Root & gt; & Lt; Call title = "one" & gt; & Lt; Cell & gt; & Lt; / Cell & gt; & Lt; Cell & gt; B & lt; / Cell & gt; & Lt; Cell & gt; C & lt; / Cell & gt; & Lt; Cell & gt; D & lt; / Cell & gt; & Lt; / Col & gt; & Lt; Call title = "two" & gt; & Lt; Cell & gt; E & lt; / Cell & gt; & Lt; Cell & gt; F & lt; / Cell & gt; & Lt; Cell & gt; G & lt; / Cell & gt; & Lt; / Col & gt; & Lt; / Root & gt;  

Produces this:

  & lt; Table & gt; & Lt; TR & gt; & Lt; Th & gt; A & lt; / Th & gt; & Lt; Th & gt; Two & lt; / Th & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; & Lt; / TD & gt; & Lt; TD & gt; E & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; B & lt; / TD & gt; & Lt; TD & gt; F & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; C & lt; / TD & gt; & Lt; TD & gt; G & lt; / TD & gt; & Lt; / TR & gt; & Lt; TR & gt; & Lt; TD & gt; D & lt; / TD & gt; & Lt; TD & gt; & Lt; / TD & gt; & Lt; / TR & gt; & Lt; / Table & gt;  

Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -