[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: XSLT filter, delete XML elements without leaving blank hol

  • From: Dimitre Novatchev <dnovatchev@gmail.com>
  • To: Jim DeLaHunt <from.xml-dev@jdlh.com>
  • Date: Sun, 21 Feb 2016 15:02:31 -0800

Re:  XSLT filter
Just add this template and remove the indent="yes" attribute of <xsl:output>:

    <xsl:template
match="text()[following-sibling::node()[1][self::maybe[remove]]]" />

The SO answer is here:
   http://stackoverflow.com/a/35543212/36305


Cheers,
Dimitre

On Sun, Feb 21, 2016 at 2:26 PM, Jim DeLaHunt <from.xml-dev@jdlh.com> wrote:
> Hello, XML-dev:
>
> I am writing an XSLT filter which reads an XML file, and
> generates a shorter XML file with some selected elements (and
> all their children) removed.
>
> So far, my filter gives me output which is valid, well-formed XML,
> but it has blank lines where the removed elements used to be. Formally, I
> think the text node before the removed element remains, causing the
> blank line. I would like to remove this blank line, but leave all other
> indentation as-is. How can I do this?
>
> (If you winning points on Stackoverflow, this question is at
> <http://stackoverflow.com/questions/35407361/how-can-my-xslt-filter-avoid-leaving-blank-lines-in-output-xml-when-deleting-ele>,
> and I will upvote good answer there. A reply on this list is also welcome.
> The best answer so far on Stack Overflow says, essentially, that with
> XSLT 1.0 I'm hooped, but with XSLT 3.0 there are nice ways to express
> this filter.)
>
> A simplified version of my XSLT filter is:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
>   <xsl:output method="xml" omit-xml-declaration="no" indent="yes"
> encoding="utf-8" />
>
>   <xsl:template match="node() | @*">
>     <xsl:copy>
>             <xsl:apply-templates select="node() | @*" />
>     </xsl:copy>
>   </xsl:template>
>
>   <xsl:template match="root/maybe[remove]" />
>
> </xsl:stylesheet>
>
>
> A very simplified version of my input XML file is:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <root>
>       <maybe><keep /></maybe>
>    <maybe><remove/></maybe>
> </root>
>
> Yes, the indentation is non-standard. I'm trying to make the point
> that I want the filter to leave the indentation it finds, except for
> the elements it removes. This lets me confirm the result using conventional
> diff.
>
> The output I get now (using xsltproc from libxslt, on MacOS X 10.10):
>
> <?xml version="1.0" encoding="utf-8"?>
> <root>
>       <maybe><keep/></maybe>
>
> </root>
>
>
> The blank line between <keep/> and </root> is what I'm trying to eliminate.
>
> Now, elsewhere on [Stack Overflow], related questions "XSLT: how to prevent
> the XSLT code from generating redundant blank-space in output xml"
> <http://stackoverflow.com/questions/1899687/xslt-how-to-prevent-the-xslt-code-from-generating-redundant-blank-space-in-outp>
> and "Removing blank lines in XSLT"
> <http://stackoverflow.com/questions/3265244/removing-blank-lines-in-xslt>
> suggest adding xsl:strip-space
> <https://www.w3.org/TR/xslt#element-strip-space>
> to the XSLT filter:
>
>     <xsl:strip-space elements="*"/>
>
>
> When I try that, the output file no longer has the blank line, but it
> now has different indentation than the original:
>
> <?xml version="1.0" encoding="utf-8"?>
> <root>
>   <maybe>
>     <keep/>
>   </maybe>
> </root>
>
>
> (Note that <maybe> and <keep/> and </maybe> are now on separate lines,
> and indented differently.)
>
> So, is there an XSLT element which will remove the blank line along
> with the element, but leave the other indentation and line breaks
> intact?
>
> Also, my real files are from GnuCash <http://gnucash.org/> and have
> a much more complex structure. My real XSLT filter has a more
> complex match expression. Thus, an XSLT element which doesn't require me
> to repeat the match expression is preferred.
>
> <xsl:template match='gnc-v2//gnc:account[@version="2.0.0"]/act:slots/
>     slot[slot:key/text()="import-map-bayes"]/slot:value[@type="frame"]/
>     slot/slot:value[@type="frame"]/slot[starts-with(slot:key/text(),
>         "Assets, Business, CAD:"
>     )]'
> />
>
> I'm using XSLT 1.0 because that's what my tool supports. Does XSLT 2.0
> provide a better answer for this question?
>
> Thank you in advance for your help.
>
> --
>   --Jim DeLaHunt, jdlh@jdlh.com   http://blog.jdlh.com/ (and jdlh.com)
>     multilingual websites consultant, Vancouver BC, Canada.



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
Sanity is madness put to good use.
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.