[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: badly need xsl help(prob with accessing child node
Hi guys, Lets try to forget everything that started b'cos of me. We are here to help each other, not to fight. Try to be as friendly as possible and help each other. I tried the namespace(you can see that in my modified code in init() function) as Michael Kay said. But I have no luck. This is what I am exactly doing and want to do. Can anybody give any suggestions? Thanks. xml: <data xmlns="urn:schemas.abcd-com:layers"> <Rpt_Inven xmlns="urn:schemas.abcd-com:RepInven" > <Inven> <EffectiveDate>2003-05-30</EffectiveDate> </Inven> <Inven> <EffectiveDate>2003-07-30</EffectiveDate> </Inven> </Rpt_Inven> <RegionalOptions xmlns="urn:schemas.abcd-com:Static"> <Date> <Calendar> <TwoDigitYear>79</TwoDigitYear> </Calendar> <Separator>/</Separator> <ShortFormat>3</ShortFormat> </Date> <Currency> <DecimalSymbol>.</DecimalSymbol> <GroupingSymbol>,</GroupingSymbol> <DigitGrouping>2</DigitGrouping> </Currency> <Locale>1033</Locale> </RegionalOptions> </data> xsl : <xsl:stylesheet version="1.0" xmlns="" xmlns:lay="urn:schemas.abcd-com:layers" xmlns:rep="urn:schemas.abcd-com:RepInven" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:scrdt="urn:schemas.abcd-com:datatypes" xmlns:stat="urn:schemas.abcd-com:Static"> <xsl:output method="xml" encoding="UTF-8"/> <xsl:template match="lay:data"> <_Ctrl> <xsl:call-template name="callInit"> <xsl:with-param name="regOptNode" select="stat:RegionalOptions"/> </xsl:call-template> <xsl:for-each select="rep:Rpt_Inven/rep:Inven/rep:EffectiveDate"> <_Item> <xsl:call-template name="genItem"> <xsl:with-param name="attrNode" select="."/> </xsl:call-template> </_Item> </xsl:for-each> </_Ctrl> </xsl:template> <xsl:template name="callInit"> <xsl:param name="regOptNode"/> <xsl:value-of select="scrdt:init($regOptNode)"/> <xsl:value-of select="scrdt:getValue($attrNode)"/> </xsl:template> <xsl:template name="genItem"> <xsl:param name="attrNode"/> <xsl:value-of select="scrdt:getValue($attrNode)"/> </xsl:template> <msxsl:script language="JScript" implements-prefix="scrdt"><![CDATA[ var _xDate_ShortFormat; var _xDate_Separator; function init(RegOpts) { if( !RegOpts.length) return "length 0"; var dateNode = RegOpts[0].selectSingleNode("stat:Date"); if(dateNode != null ) { _xDate_ShortFormat = dateNode.selectSingleNode("ShortFormat"); _xDate_Separator = dateNode.selectSingleNode("Separator"); } else { //It seems it is always going here. _xDate_ShortFormat = 5; _xDate_Separator = "-"; } return ""; } function getValue(nodes) { try { var node = nodes[0]; var val, def; switch (node.nodeType) { case 1: val = node.text; def = node; break; case 2: val = node.nodeValue; def = null; break; case 3: val = node.nodeValue; def = node.parentNode; break; } if (def!=null) { val = xVal.formatValue(val); } return val; } catch(e) { return e.description; } } function formatValue() { var dt; var fmt = new RegExp("^([0-9]{4})-([0-9]{2})-([0-9]{2})$",""); var res = dStr.match(fmt); if (res!=null) { var y = parseInt(res[1],10); var m = parseInt(res[2],10); var d = parseInt(res[3],10); dt = new Date(y,m-1,d); if (dt.getFullYear()!=y || dt.getMonth()!=(m-1) || dt.getDate()!=d) return ""; } else return ""; if (dt!=null) { var y = dt.getFullYear(); var m = dt.getMonth() + 1; var d = dt.getDate(); switch(_xDate_ShortFormat) { case 1: return m.toString() + _xDate_Separator + d.toString() + _xDate_Separator + y.toString(); case 3: return (m<10?"0":"") + m.toString() + _xDate_Separator + (d<10?"0":"") + d.toString() + _xDate_Separator + y.toString(); case 2: return d.toString() + _xDate_Separator + m.toString() + _xDate_Separator + y.toString(); case 4: return (d<10?"0":"") + d.toString() + _xDate_Separator + (m<10?"0":"") + m.toString() + _xDate_Separator + y.toString(); case 5: return y.toString() + _xDate_Separator + (m<10?"0":"") + m.toString() + _xDate_Separator + (d<10?"0":"") + d.toString(); default: return m.toString() + _xDate_Separator + d.toString() + _xDate_Separator + y.toString(); } } else return ""; } ]]></msxsl:script> </xsl:stylesheet> With this xml and xsl, I am expecting my out some thing like <_Ctrl xmlns="" xmlns:lay="urn:schemas.abcd-com:layers" xmlns:rep="urn:schemas.abcd-com:RepInven" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:scrdt="urn:schemas.abcd-com:datatypes" xmlns:stat="urn:schemas.abcd-com:Static"> <_Item> 05/30/2003 </_Item> <_Item> 07/30/2003 </_Item> </_Ctrl> But it is always producing something like <_Ctrl xmlns="" xmlns:lay="urn:schemas.abcd-com:layers" xmlns:rep="urn:schemas.abcd-com:RepInven" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:scrdt="urn:schemas.abcd-com:datatypes" xmlns:stat="urn:schemas.abcd-com:Static"> <_Item> 2003-05-30 </_Item> <_Item> 2003-07-30 </_Item> </_Ctrl> I think this b'cos I am not able to get access to the <Date/> node in the script function. And whenever I say RegOpts(i).firstChild , I am getting the result I want. Any ideas about. I am very desperate for this. thanks, ~Mur XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|