Subject: [xsl] An XPath expression that avoids writing special case code? From: "Roger L Costello costello@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 17 Jun 2021 14:06:03 -0000 |
Hi Folks, My XML document contains a bunch of <Row> elements, like so: <Document> ... <Row> <Cell> <Data>airport</Data> </Cell> <Cell> <Data>airports</Data> </Cell> </Row> ... </Document> I want to fetch the Row whose Cell[1]/Data is 'airport' and whose Cell[2]/Data is 'airports'. So I created this XPath expression: /Document/Row[Cell[1]/Data eq 'airport'][Cell[2]/Data eq 'airports'] I do this kind of fetching operation often, so I created a function to fetch the desired Row: <xsl:function name="f:getRow"> <xsl:param name="element"/> <xsl:param name="parent"/> <xsl:sequence select="$document/Row[Cell[1]/Data eq $element][Cell[2]/Data eq $parent]" /> </xsl:function> I call the function this way: <xsl:sequence select="f:getRow('airport', 'airports')" /> Sometimes there is an element that doesn't have a parent. That is, sometimes I'd like to fetch a Row in which Cell[2] is empty, like this: <Row> <Cell> <Data>aviation</Data> </Cell> <Cell/> </Row> Then this call to f:getRow fails: <xsl:sequence select="f:getRow('aviation', '')" /> <!-- Those are two apostrophes within the parentheses --> Clearly I need to modify f:getRow. I could add special case code to test $parent to see if it is empty (the '' string) and do one thing, and if it's not empty do another thing. But I wonder if there is a more elegant solution that doesn't involve special case code? Is there a way to modify the XPath expression in f:getRow such that it fetches the correct Row regardless of whether $parent is empty or not? /Roger
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] [ANN] Balisage Program Adds L, B Tommie Usdin btusd | Thread | Re: [xsl] An XPath expression that , Martin Honnen martin |
[xsl] [ANN] Balisage Program Adds L, B Tommie Usdin btusd | Date | Re: [xsl] An XPath expression that , Martin Honnen martin |
Month |