Subject: RE: [xsl] select a node: child of an ancestor From: Anthony <apwebdesign@xxxxxxxxx> Date: Thu, 19 May 2005 21:48:10 -0700 (PDT) |
--- Aron Bock <aronbock@xxxxxxxxxxx> wrote: > Anthony, just your luck there've been at least 3 > posts today about just this > business of determining some property of a "related" > node. > > So, this XML (yours, extended): > > <data> > <LeftNavTree n="1"> > <LeftNavParamList> > <SelectedNode>Link 1.1.1</SelectedNode> > </LeftNavParamList> > <TreeNodeList> > <TreeNode> > <NodeID>Link 1</NodeID> > <NodeContent>...</NodeContent> > <TreeNodeList> > <TreeNode> > <NodeID>Link 1.1</NodeID> > <NodeContent>...</NodeContent> > <TreeNodeList> > <TreeNode> > <NodeID>Link 1.1.1</NodeID> > <NodeContent>...</NodeContent> > </TreeNode> > </TreeNodeList> > </TreeNode> > </TreeNodeList> > </TreeNode> > </TreeNodeList> > </LeftNavTree> > > <LeftNavTree n="2"> > <LeftNavParamList> > <SelectedNode>Link 2.2.2</SelectedNode> > </LeftNavParamList> > <TreeNodeList> > <TreeNode> > <NodeID>Link 2</NodeID> > <NodeContent>...</NodeContent> > </TreeNode> > </TreeNodeList> > </LeftNavTree> > </data> > > With this XSL: > > <?xml version="1.0" encoding="iso8859-1"?> > <xsl:stylesheet version="1.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output method="xml" indent="yes"/> > > <xsl:template match="/"> > <data> > <xsl:apply-templates select="//NodeID"/> > </data> > </xsl:template> > > <xsl:template match="NodeID"> > <xsl:copy> > <xsl:attribute name="SelectedNode"> > <xsl:value-of > select="ancestor::LeftNavTree//SelectedNode[1]"/> > </xsl:attribute> > <xsl:value-of select="."/> > </xsl:copy> > </xsl:template> > > </xsl:stylesheet> > > > Yields this: > > <?xml version="1.0" encoding="UTF-8"?> > <data> > <NodeID SelectedNode="Link 1.1.1">Link 1</NodeID> > <NodeID SelectedNode="Link 1.1.1">Link > 1.1</NodeID> > <NodeID SelectedNode="Link 1.1.1">Link > 1.1.1</NodeID> > <NodeID SelectedNode="Link 2.2.2">Link 2</NodeID> > </data> > > Of course, you could optimize this quite a few ways, > but you get the idea. > > Regards, > > --A > > >From: Anthony <apwebdesign@xxxxxxxxx> > >Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > >Subject: [xsl] select a node: child of an ancestor > >Date: Thu, 19 May 2005 16:55:51 -0700 (PDT) > > > >I have the following xml tree, in which I need to > >compare the value of <SelectedNode> with <NodeId> > >while iterating: > > > > > ><LeftNavTree> > > <LeftNavParamList> > > <SelectedNode>Link 1.1.1<</SelectedNode> > > </LeftNavParamList> > > <TreeNodeList> > > <TreeNode> > > <NodeID>Link 1</NodeID> > > <NodeContent>...</NodeContent> > > <TreeNodeList> > > <TreeNode> > > <NodeID>Link 1.1</NodeID> > > <NodeContent>...</NodeContent> > > <TreeNodeList> > > <TreeNode> > > <NodeID>Link 1.1.1</NodeID> > > <NodeContent>...</NodeContent> > > </TreeNode> > > </TreeNodeList> > > </TreeNode> > > </TreeNodeList> > > </TreeNode> > ></TreeNodeList> > ></LeftNavTree> > > > >There could be more than one LeftNavTree, so > >originally I was using this xpath: > >//p:LeftNavTree/p:LeftNavParamList/p:SelectedNode > > > >But it's concatonating the values of SelectedNode > from > >both LeftNavTree's. I need an xpath expression that > >will grab "the SelectedNode element which is a > >descendent of the ancestor LeftNavTree element for > the > >current node". Thanks Aaron. Doing the // thing for referencing the tree was causing me problems in the first place. I figured out a better way. I would've liked to just set a global var, but that wasn't possible without any context. And passing a local var to all my templates proved undoable, since there can be other standard xml tags nested inside some of the elements. I would've had to retrofit all those templates to pass the parameters along. The thing that works best for me is the "ancestor::relative/path/to/node". Anthony ph: (408) 656-2473 blog: http://www.chovy.com __________________________________ Do you Yahoo!? Yahoo! Small Business - Try our new resources site! http://smallbusiness.yahoo.com/resources/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] select a node: child of a, Aron Bock | Thread | RE: [xsl] select a node: child of a, Aron Bock |
RE: [xsl] select a node: child of a, Aron Bock | Date | RE: [xsl] select a node: child of a, Aron Bock |
Month |