![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >microsoft.public.xsl Archive Home >Recent entries >Thread Prev - Loop through children >Thread Next - Re: Loop through children Re: Loop through childrenTo: NULL Date: 3/27/2008 4:12:00 PM
I tried this following and it only gives me the first child and FIELDS for
the tag name:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="form/@Major" order="descending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="FIELDS">
<form>
<xsl:for-each select="child">
<sectionNumber>
<xsl:value-of select="ancestor::FORM/@SECCODE"/>
</sectionNumber>
<primary>
<xsl:value-of select="ancestor::FORM/@MAJOR"/>
</primary>
<formName>
<xsl:value-of select="ancestor::FORM/@FORMCODE"/>
</formName>
<tagName>
<xsl:value-of select="name()"/>
</tagName>
<value>
<xsl:value-of select="*"/>
</value>
</xsl:for-each>
</form>
</xsl:template>
</xsl:stylesheet>
The result is:
<?xml version="1.0" encoding="utf-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tagName>FIELDS</tagName>
<value>692</value>
</form>
Thanks,
Tom
"tshad" <tshad@d...> wrote in message
news:el86taFkIHA.4356@T......
> If I have the following xml:
>
> <?xml version="1.0" encoding="utf-8"?>
> <REPORT VERSION="1.10" FILENUM="" DESCRIPTION="Form Utility XML: 3/18/2008
> 12:27:13 PM" MAJORFORM="1004">
> <ORDER></ORDER>
> <TRACKING></TRACKING>
> <FORMS>
> <FORM NUM="1" FORMCODE="1004" SECCODE="1" DESC="" MAJOR="True" >
> <FIELDS>
> <OTHERFILENUMBER>692</OTHERFILENUMBER>
> <FNMA_FILENUMBER>693</FNMA_FILENUMBER>
> <SUBPROPADDRESS>3</SUBPROPADDRESS>
> </FIELDS>
> <FORMPHOTOS></FORMPHOTOS>
> <ATTACHMENTS></ATTACHMENTS>
> </FORM>
> </FORMS>
> </REPORT>
>
> I have can have about 200 nodes under the <FIELDS> node.
>
> Each node has it's own name.
>
> What I am looking for is to build an style sheet that loops through the
> children and creates a set of nodes that would look something like:
>
> <?xml version="1.0" encoding="utf-8"?>
> <REPORT>
> <form>
> <sectionNumber>1</sectionNumber>
> <primary>True</primary>
> <formName>1004</formName>
> <tagName>OTHERFILENUMBER</tagName>
> <value>692</value>
> <form>
> <form>
> <sectionNumber>1</sectionNumber>
> <primary>True</primary>
> <formName>1004</formName>
> <tagName>FNMA_FILENUMBER</tagName>
> <value>693</value>
> <form>
> <form>
> <sectionNumber>1</sectionNumber>
> <primary>True</primary>
> <formName>1004</formName>
> <tagName>SUBPROPADDRESS</tagName>
> <value>SUBPROPADDRESS</value>
> <form>
> </REPORT>
>
> The xslt file I was working with is:
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> <xsl:output method="xml" indent="yes"/>
> <xsl:template match="/*">
> <root_node>
> <xsl:apply-templates>
> <xsl:sort select="form/@Major" order="descending"/>
> </xsl:apply-templates>
> </root_node>
> </xsl:template>
> <xsl:template match="FIELDS">
> <form>
> <sectionNumber>
> <xsl:value-of select="ancestor::FORM/@SECCODE"/>
> </sectionNumber>
> <primary>
> <xsl:value-of select="ancestor::FORM/@MAJOR"/>
> </primary>
> <formName>
> <xsl:value-of select="ancestor::FORM/@FORMCODE"/>
> </formName>
> <tagName>
> <xsl:value-of select="name()"/>
> </tagName>
> <value>
> <xsl:value-of select="*"/>
> </value>
> </form>
> </xsl:template>
> </xsl:stylesheet>
>
> This almost works for the first one but I need it to loop through each
> tag. I tried using <xsl:for-each...> but couldn't seem to get it to work.
>
> I also get FIELDS in the <tagName> tag. That is because name() is using
> the name of the current tag (I suppose) that I found in the match.
>
> I can't seem to get the <xsl:copy> to work for my root node (to get the
> name of the Root Node). Actually it works, but it puts
> (xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance) in the <form> tag.
> But the root node is <REPORT> as I wanted.
>
> This is when I do it like this.
>
> <xsl:copy>
> <xsl:apply-templates>
> <xsl:sort select="form/@Major" order="descending"/>
> </xsl:apply-templates>
> </xsl:copy>
>
> If I do it as above, it puts tne xmlns stuff in the root node, which is
> now <root_node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">.
> How do I fix that?
>
> Thanks,
>
> Tom
>
| ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
