Keep XML fields and one child using XSLT

<p>I am trying to trim an XML document into a new XML document. I have the following XML:</p><pre><br /><code><rpc-reply><br /> <configuration changed-seconds="1450987515" changed-localtime="2015-12-24 20:05:15 UTC"><br /> <routing-instances><br /> <instance><br /> <name>SOMENAME</name><br /> <instance-type>virtual-router</instance-type><br /> <interface><br /> <name>lo0.1</name><br /> </interface><br /> <protocols><br /> <bgp><br /> <group><br /> <name>EBGP-TEST</name><br /> <type>external</type><br /> <neighbor><br /> <name>1.1.1.1</name><br /> <peer-as>7222</peer-as><br /> </neighbor><br /> </group><br /> </bgp><br /> <ospf><br /> <area><br /> <name>0.0.0.0</name><br /> <comment>SOME COMMENT</comment><br /> <interface><br /> <name>all</name><br /> </interface><br /> </area><br /> </ospf><br /> </protocols><br /> </instance><br /> </routing-instances><br /> </configuration><br /> <cli><br /> <banner>[edit]</banner><br /> </cli><br /></rpc-reply><br /></code><br /></pre><p>This is what I need:</p><pre><br /><code><rpc-reply><br /> <configuration changed-seconds="1450987515" changed-localtime="2015-12-24 20:05:15 UTC"><br /> <routing-instances><br /> <instance><br /> <name>SOMENAME</name><br /> <protocols><br /> <ospf><br /> <area><br /> <name>0.0.0.0</name><br /> <comment>SOME COMMENT</comment><br /> <interface><br /> <name>all</name><br /> </interface><br /> </area><br /> </ospf><br /> </protocols><br /> </instance><br /> </routing-instances><br /> </configuration><br /></rpc-reply><br /></code><br /></pre><p>Here is the XSLT code I am using:</p><pre><br /><code><xsl:stylesheet xmlns:xsl="http://ift.tt/tCZ8VR" xmlns:ns="match:ns" version="1.0"><br /> <xsl:output omit-xml-declaration="yes" indent="yes"/><br /> <xsl:strip-space elements="*"/><br /><br /> <ns:WhiteList><br /> <name>area</name><br /> <name>interface</name><br /> <name>instance</name><br /> <name>metric</name><br /> </ns:WhiteList><br /><br /> <xsl:template match="node()|@*"><br /> <xsl:copy><br /> <xsl:apply-templates select="node()|@*"/><br /> </xsl:copy><br /> </xsl:template><br /><br /> <xsl:template match="*[not(descendant-or-self::*[name()=document('')/*/ns:WhiteList/*])]"/><br /><br /> </xsl:stylesheet><br /></code><br /></pre><p>And it almost works:</p><pre><br /><code><rpc-reply><br /> <configuration changed-seconds="1450987515" changed-localtime="2015-12-24 20:05:15 UTC"><br /> <routing-instances><br /> <instance><br /> <interface/><br /> <protocols><br /> <ospf><br /> <area><br /> <interface/><br /> </area><br /> </ospf><br /> </protocols><br /> </instance><br /> </routing-instances><br /> </configuration><br /></rpc-reply><br /></code><br /></pre><p>I just need the child "<code><name></code>" for the interesting elements (if there is one there) and bonus if I can somehow get the "<code><comment></code>" right above "<code><interface></code>" Tried different combinations but not sure how to do it.</p><br /><h2>Click here view more answers <a href="%20http://stackoverflow.com/questions/34469973/keep-xml-fields-and-one-child-using-xslt">http://ift.tt/1QNwIBf</a></h2>

Nhận xét

Bài đăng phổ biến từ blog này

Align div to bottom of the page in bootstrap

Align elements inside an tag vertically

Javascript is unable to stop page loading