RE: [xsl] Testing for parent/parent node or ancestor node

Subject: RE: [xsl] Testing for parent/parent node or ancestor node
From: Scott Trenda <Scott.Trenda@xxxxxxxx>
Date: Fri, 30 Dec 2011 09:06:27 -0500
Vincenzo,

You have a bit of a dilemma here if you're looking for the nearest ancestor that's either a Field, AutoEnter, or Validation, because you have AutoEnter and Validation elements that are children of Field elements. For a <Chunk> within a <Validation> within a <Field>, both ancestor::Validation and ancestor::Field are going to return nodes. So I don't think that's going to work like you want it to. You might want to consider using a template:

<xsl:template match="@* | node()" mode="get-parent-type-id">
	<xsl:apply-templates select="parent::*" mode="get-parent-type-id" />
</xsl:template>
<xsl:template match="Field"      mode="get-parent-type-id">53</xsl:template>
<xsl:template match="AutoEnter"  mode="get-parent-type-id">54</xsl:template>
<xsl:template match="Validation" mode="get-parent-type-id">55</xsl:template>
<!-- repeat as needed for other type IDs -->

...

	<xsl:variable name="from">
		<xsl:apply-templates select=".." mode="get-parent-type-id" />
	</xsl:variable>

Easy enough?

~ Scott

-----Original Message-----
From: Vincenzo Menanno [mailto:enzo13@xxxxxxx] 
Sent: Friday, December 30, 2011 8:43 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] Testing for parent/parent node or ancestor node

Here is the code I am using

As mentioned below I can't seem to figure out how to know what sibling that the chunk node is in. So far I have tried 2 different approaches but neither work.

     <xsl:variable name="from">
        <xsl:choose>
           <xsl:when test="../parent=Field">53</xsl:when>
           <xsl:when test="../parent=AutoEnter">54</xsl:when>
           <xsl:when test="../parent=Validation">55</xsl:when>
        </xsl:choose>
     </xsl:variable>

Thanks

Vince

--------------------------------
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
   <xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0"/>
   <xsl:template match="/">
       <FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult";>
           <ERRORCODE>0</ERRORCODE>
          <PRODUCT BUILD="04-13-2011" NAME="FileMaker Pro" VERSION="11.0v1"/>
           <DATABASE DATEFORMAT="M/d/yyyy" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT="h:mm:ss a"/>
           <METADATA>
              <FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="FROM" TYPE="NUMBER"/>         <!-- Field Calculation Calculation, AutoEnter, Validation-->
           </METADATA>
           <RESULTSET>
               <xsl:variable name="field_calculation" select="/FMPReport/File[1]/BaseTableCatalog[1]//Chunk"/>               
               <xsl:attribute name="FOUND">
                   <xsl:value-of select="count($field_calculation)"/>
               </xsl:attribute>
               <xsl:apply-templates select="$field_calculation"/>
           </RESULTSET>
       </FMPXMLRESULT>
   </xsl:template>

   <xsl:template match="Chunk" xmlns="http://www.filemaker.com/fmpxmlresult";>

      <xsl:variable name="from">
         <xsl:choose>
            <xsl:when test="../parent=Field">53</xsl:when>
            <xsl:when test="../parent=AutoEnter">54</xsl:when>
            <xsl:when test="../parent=Validation">55</xsl:when>
         </xsl:choose>
      </xsl:variable>

       <xsl:element name="ROW">
           <xsl:attribute name="MODID">0</xsl:attribute>
           <xsl:attribute name="RECORDID">1</xsl:attribute>
          <COL>
             <DATA><xsl:value-of select="$from"/></DATA>
          </COL>
       </xsl:element>
   </xsl:template>
</xsl:stylesheet>
--------------------------------
<?xml version="1.0" encoding="UTF-16"?>
<FMPReport link="Summary.xml" creationTime="5:16:32 PM" creationDate="12/28/2011" type="Report" version="11.0v1">
  <File name="TEST" path="/Users/enzo13/Desktop/process/CMS/">
     <BaseTableCatalog>
        <BaseTable id="129" records="1" name="Test">
           <FieldCatalog>
              <Field id="1" dataType="Text" fieldType="Normal" name="name">
                 <Comment/>
                 <AutoEnter allowEditing="True" constant="False" furigana="False" lookup="False" calculation="False">
                    <ConstantData/>
                 </AutoEnter>
                 <Validation message="False" maxLength="False" valuelist="False" calculation="False" alwaysValidateCalculation="False" type="OnlyDuringDataEntry">
                    <NotEmpty value="False"/>
                    <Unique value="False"/>
                    <Existing value="False"/>
                    <StrictValidation value="False"/>
                 </Validation>
                 <Storage autoIndex="True" index="None" indexLanguage="English" global="False" maxRepetition="1"/>
              </Field>
              <Field id="2" dataType="Number" fieldType="Calculated" name="sfksjfhd">
                 <Calculation table="Test"><![CDATA[Left ( name; 3 ) & "sdkfhskdfhsdf" & sdafsadf & Asin ( ZARK::boart ) & sdafsadf Copy2]]></Calculation>
                 <DisplayCalculation>
                    <Chunk type="FunctionRef">Left</Chunk>
                    <Chunk type="NoRef"> ( </Chunk>
                    <Chunk type="FieldRef">
                       <Field table="Test" id="1" name="name"/>
                    </Chunk>
                    <Chunk type="NoRef">; 3 ) &amp; &quot;sdkfhskdfhsdf&quot; &amp; </Chunk>
                    <Chunk type="CustomFunctionRef">sdafsadf</Chunk>
                    <Chunk type="NoRef"> &amp; </Chunk>
                    <Chunk type="FunctionRef">Asin</Chunk>
                    <Chunk type="NoRef"> ( </Chunk>
                    <Chunk type="FieldRef">
                       <Field table="ZARK" id="1" name="boart"/>
                    </Chunk>
                    <Chunk type="NoRef"> ) &amp; </Chunk>
                    <Chunk type="CustomFunctionRef">sdafsadf Copy2</Chunk>
                 </DisplayCalculation>
                 <Comment/>
                 <AutoEnter alwaysEvaluate="False"/>
                 <Storage storeCalculationResults="False" indexLanguage="English" global="False" maxRepetition="1"/>
              </Field>
              <Field id="3" dataType="Text" fieldType="Normal" name="sfkjsdfklj">
                 <Comment/>
                 <AutoEnter allowEditing="True" overwriteExistingValue="False" alwaysEvaluate="False" constant="False" furigana="False" lookup="False" calculation="True">
                    <ConstantData/>
                    <Calculation table="Test"><![CDATA[Asin ( sfksjfhd )]]></Calculation>
                    <DisplayCalculation>
                       <Chunk type="FunctionRef">Asin</Chunk>
                       <Chunk type="NoRef"> ( </Chunk>
                       <Chunk type="FieldRef">
                          <Field table="Test" id="2" name="sfksjfhd"/>
                       </Chunk>
                       <Chunk type="NoRef"> )</Chunk>
                    </DisplayCalculation>
                 </AutoEnter>
                 <Validation message="False" maxLength="False" valuelist="False" calculation="False" alwaysValidateCalculation="False" type="OnlyDuringDataEntry">
                    <NotEmpty value="False"/>
                    <Unique value="False"/>
                    <Existing value="False"/>
                    <StrictValidation value="False"/>
                 </Validation>
                 <Storage autoIndex="True" index="None" indexLanguage="English" global="False" maxRepetition="1"/>
              </Field>
              <Field id="4" dataType="Text" fieldType="Normal" name="sfdkjhdsfsdf">
                 <Comment/>
                 <AutoEnter allowEditing="True" constant="False" furigana="False" lookup="False" calculation="False">
                    <ConstantData/>
                 </AutoEnter>
                 <Validation message="False" maxLength="False" valuelist="False" calculation="True" alwaysValidateCalculation="False" type="OnlyDuringDataEntry">
                    <NotEmpty value="False"/>
                    <Unique value="False"/>
                    <Existing value="False"/>
                    <Calculation table="Test"><![CDATA[Acos ( sfksjfhd )]]></Calculation>
                    <DisplayCalculation>
                       <Chunk type="FunctionRef">Acos</Chunk>
                       <Chunk type="NoRef"> ( </Chunk>
                       <Chunk type="FieldRef">
                          <Field table="Test" id="2" name="sfksjfhd"/>
                       </Chunk>
                       <Chunk type="NoRef"> )</Chunk>
                    </DisplayCalculation>
                    <StrictValidation value="False"/>
                 </Validation>
                 <Storage autoIndex="True" index="None" indexLanguage="English" global="False" maxRepetition="1"/>
              </Field>
           </FieldCatalog>
        </BaseTable>
     </BaseTableCatalog>
  </File>
</FMPReport>
--------------------------------

On Dec 30, 2011, at 6:16 AM, Martin Honnen wrote:

> Hi,
> 
> Vincenzo Menanno wrote:
>> Martin,
>> 
>>> From your email address looks like you are in Germany - I am also in Germany at this time visiting family. Dresden.
> 
> I am in Germany but nowhere near Dresden :)
> 
>> I am a little hesitant to send files to the list.
>> 
>> Do you mind if I send you the files instead. If you want to charge me for this let me know.
> 
> No, let's keep that on the list, for others to participate and help.
> 
> Requests for minimal samples allowing us to reproduce the problem are also meant as a hint for you to step back and try to isolate the problem, perhaps finding the current flaw in your code yourself that way, or if not to at least arrive at something others can look through quickly.

Current Thread