|
Subject: Re: [xsl] How to select elements containing ARPT but not elements containing APPC_ARPT or ARPT_RMK? From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sat, 22 Oct 2022 21:17:36 -0000 |
Here is a pure XPath 1.0 solution:
/*/*[column_header[text()]]/affected_tables[contains(concat('; ',., '; '),
'; ARPT;')]
Thanks,
Dimitre
On Sat, Oct 22, 2022 at 11:21 AM Roger L Costello costello@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> Hi Folks,
>
> Here is my input:
>
> <test>
> <row>
> <column_header>A</column_header>
> <affected_tables>ARPT_RMK</affected_tables>
> </row>
> <row>
> <column_header>B</column_header>
> <affected_tables>APPC_ARPT</affected_tables>
> </row>
> <row>
> <column_header>C</column_header>
> <affected_tables>HLPT; ARPT</affected_tables>
> </row>
> <row>
> <column_header>D</column_header>
> <affected_tables>HLPT; ARPT; VFR_RTE</affected_tables>
> </row>
> <row>
> <column_header>E</column_header>
> <affected_tables>ARPT; VFR_RTE</affected_tables>
> </row>
> <row>
> <column_header>F</column_header>
> <affected_tables>ARPT</affected_tables>
> </row>
> <row>
> <column_header></column_header>
> <affected_tables>ARPT</affected_tables>
> </row>
> </test>
>
> I want to output the column_headers of all rows whose affected_tables
> contain ARPT.
>
> The desired output is:
>
> <column_header>C</column_header>
> <column_header>D</column_header>
> <column_header>E</column_header>
> <column_header>F</column_header>
>
> I thought that this XSLT would work:
>
> <xsl:for-each select="//row[column_header][matches(affected_tables, '[
> ;]?ARPT[ ;]?')]">
> <column_header><xsl:value-of select="column_header"/></column_header>
> </xsl:for-each>
>
> I interpret that for-loop as: "Iterate through all row elements and output
> the column_header of each row element that has a non-null child
> column_header element and has a child affected_tables element that contains
> the string ARPT which is optionally preceded by a space or a semi-colon and
> optionally followed by a space or a semi-colon."
>
> Apparently that is not what the for-loop says because it produces this
> incorrect output:
>
> <column_header>A</column_header>
> <column_header>B</column_header>
> <column_header>C</column_header>
> <column_header>D</column_header>
> <column_header>E</column_header>
> <column_header>F</column_header>
> <column_header/>
>
> Two questions:
>
> 1. What does my for-loop actually say?
> 2. What is a correct solution?
>
> /Roger
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] How to select elements co, Gary Gapinski lists@ | Thread | Re: [xsl] How to select elements co, Roger L Costello cos |
| Re: [xsl] How to select elements co, Gary Gapinski lists@ | Date | Re: [xsl] How to select elements co, Roger L Costello cos |
| Month |