xsl-list
[Top] [All Lists]

RE: Selection of Just Attribute Nodes and Element Child Nodes

2004-06-28 02:14:13
You can use a union to select just the attributes with on statement and
just the children with another...

<newNode>
  <xsl:copy-of select="foo/barChild/@* | foo/barChild/*"/>
</newNode>

Would give you:

<newNode at="2" anAt="3">
        <barGC>
        ...
        </barGC>
</newNode>

Which may very well be enough for you.  But depending on what you are
trying to do with the results of your XPath statement you may want to do
something like:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">
<xsl:template match="/">
<newNode>
  <attributes>
    <xsl:apply-templates select="foo/barChild/@*"/>
  </attributes>
  <children>
    <xsl:apply-templates select="foo/barChild/*"/>
  </children>
</newNode>
</xsl:template>

<xsl:template match="@*">
  <attribute name="{local-name()}"/>
</xsl:template>

<xsl:template match="*">
  <child name="{local-name()}"/>
</xsl:template>

</xsl:stylesheet>

Which returns...

<?xml version="1.0" encoding="UTF-8"?>
<newNode>
  <attributes>
    <attribute name="at"/>
    <attribute name="anAt"/>
  </attributes>
  <children>
    <child name="barGC"/>
  </children>
</newNode>

Obviously the first is much easier but your options on what you can do
with it are limited.  The second allows complete control over your
output by allowing you to match either all attributes and all children
with @* and * as the match attributes value or each individual attribute
or child by using their local-name as the match attribute value e.g.
match="@at" or match="barGC".

Best of luck!

<M:D/>
 :: Announcing Saxon.NET (v.8.0-B) Java to C# and .NET Conversion
Project ::
 :: Be part of the project development at
http://www.x2x2x.org/x2x2x/home ::
 
 

-----Original Message-----
From: Ramkumar Menon [mailto:ram(_dot_)menon(_at_)oracle(_dot_)com]
Sent: Monday, June 28, 2004 2:39 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Selection of Just Attribute Nodes and Element Child
Nodes
Importance: High

  Hi,
How do I select just the attribute nodes and element children from a
context node using XPath?

for e.g.

<foo>
    <barChild  at="2" anAt="3">
       <barGC>
          ....
       </barGC>
    </barChild>
    <anotherBarChild>
          <abGC>
              ...
          </abGC>
     </anotherBarChild>
   </foo>

Here what would be the query to retrieve all the child nodes and
attributes for barChild ?
 /foo/barChild/??????
In this case, I need to get just "at", anAt" and "barGC" as results.
thanks,
Ram


--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--



<Prev in Thread] Current Thread [Next in Thread>