xslt - Remove XML elements based on set of rules with logical conditions -


i need remove particular xml elements following xml input file based on set of rules:

<?xml version="1.0" encoding="utf-8"?> <root>     <nodex>         <value key="a">0815</value>         <value key="b">xyz</value>         <value key="c">12345</value>         <value key="d">abc</value>     </nodex>     <description>         <section01>             <subsection key="keya">some text</subsection>             <subsection key="keyb">some text</subsection>         </section01>          <section02>             <subsection key="keyc">some text</subsection>         </section02>          <section03>             <subsection key="keyd">some text</subsection>         </section03>     </description>   </root> 

the problem there exceptions these rules.

example: in xml input file of form seen above following 2 elements key="keya" , key="keyb" have removed if element value attribute key="a" contains "0815":

<subsection key="keya">some text</subsection> <subsection key="keyb">some text</subsection> 

unless: value element attribute key="b" contains "xyz" , value element attribute key="c" contains "12345" , value element attribute key="d" contains "abc"

so in case above no xml element removed, following input file...

<?xml version="1.0" encoding="utf-8"?> <root>     <nodex>         <value key="a">0815</value>         <value key="b">xyz</value>         <value key="c">23456</value>         <value key="d">def</value>     </nodex>     <description>         <section01>             <subsection key="keya">some text</subsection>             <subsection key="keyb">some text</subsection>         </section01>          <section02>             <subsection key="keyc">some text</subsection>         </section02>          <section03>             <subsection key="keyd">some text</subsection>         </section03>     </description>   </root> 

would transformed following output file:

<?xml version="1.0" encoding="utf-8"?> <root>     <nodex>         <value key="a">0815</value>         <value key="b">xyz</value>         <value key="c">23456</value>         <value key="d">def</value>     </nodex>     <description>         <section02>             <subsection key="keyc">some text</subsection>         </section02>          <section03>             <subsection key="keyd">some text</subsection>         </section03>     </description>   </root> 

the 2 subsection elements parent section01 element removed because of content of value elements attributes key="c" , key="d".

is xml manifestation following suitable representation rules processed xsl suggested in 1 of previous questions: (rule-based restructuring of nodes)?

<?xml version="1.0" encoding="utf-8"?> <rules>     <prod code="0815">         <keys>             <key>keya</key>             <key>keyb</key>         </keys>         <exceptions>             <value key="b">xyz</value>             <value key="c">12345</value>             <value key="d">abc</value>         </exceptions>     </prod>      <prod code="0815">         <keys>             <key>keyd</key>         </keys>         <exceptions>             <value key="e">zzz</value>         </exceptions>     </prod> </rules> 

how automatically create conditional tests "rules" in xml file?

exceptions can consist of number of value element entries.

is generating xslt xml rules appropriate approach?

to "remove" elements using xslt, start identity transform (which copies everything)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform">   <xsl:template match="@*|node()">     <xsl:copy>       <xsl:apply-templates select="@*|node()"/>     </xsl:copy>   </xsl:template> </xsl:stylesheet> 

then add 1 or more templates match things want remove. if want remove entire subtree templates should output nothing; if want discard node keep children, templates should execute <xsl:apply-templates select='node()'/>


Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -