diff options
author | Nicola Ken Barozzi <nicolaken@apache.org> | 2002-04-04 14:43:45 +0000 |
---|---|---|
committer | Nicola Ken Barozzi <nicolaken@apache.org> | 2002-04-04 14:43:45 +0000 |
commit | d971ae551cfd8ca3446a2169e13743cc25d4073b (patch) | |
tree | befb27ef017ebfaeef7cb13c4d1208aa73ced1fc | |
parent | e9fbe2355c5bb10d56cedbe90f27a9c2e832dbae (diff) | |
download | poi-d971ae551cfd8ca3446a2169e13743cc25d4073b.tar.gz poi-d971ae551cfd8ca3446a2169e13743cc25d4073b.zip |
Update of Krysalis Centipede build system to version 1.0-dev
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352321 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | build.number | 4 | ||||
-rw-r--r-- | build.xml | 142 | ||||
-rw-r--r-- | layout.xml | 4 | ||||
-rw-r--r-- | module.xml | 13 | ||||
-rw-r--r-- | src/contrib/targets/contrib.xtarget | 30 | ||||
-rw-r--r-- | src/contrib/targets/poibrowser.xml | 28 | ||||
-rw-r--r-- | src/contrib/targets/poibrowser/xbuild.xml | 36 | ||||
-rwxr-xr-x | src/java/Manifest.mf | 1 | ||||
-rw-r--r-- | src/scratchpad/targets/dummy.txt | 1 | ||||
-rw-r--r-- | src/scratchpad/targets/scratchpad.xtarget | 62 | ||||
-rw-r--r-- | src/targets/interactive.xtarget | 34 | ||||
-rw-r--r-- | src/targets/project.xtarget | 10 | ||||
-rw-r--r-- | src/targets/record-generation/xbuild.xml | 60 | ||||
-rw-r--r-- | src/targets/try.xml | 15 | ||||
-rw-r--r-- | status.xml | 15 | ||||
-rw-r--r-- | tools/antipede/build.xtarget | 6 | ||||
-rw-r--r-- | tools/antipede/resources/images/antipede.gif | bin | 0 -> 6333 bytes | |||
-rw-r--r-- | tools/antipede/resources/stylesheets/module.xsl | 4 | ||||
-rw-r--r-- | tools/antipede/resources/stylesheets/status.xsl | 8 |
19 files changed, 257 insertions, 216 deletions
diff --git a/build.number b/build.number index e2e8eec837..70b8f09c08 100644 --- a/build.number +++ b/build.number @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Thu Apr 04 08:58:43 CEST 2002 -build.number=85 +#Thu Apr 04 16:21:43 CEST 2002 +build.number=140 @@ -93,22 +93,110 @@ printed. <!-- Basic build targets for the project --> <!-- =================================================================== --> - <!-- ================================== --> - <!-- Interactive --> - <!-- ================================== --> + <!-- =================================================================== --> + <!-- Interactive build --> + <!-- =================================================================== --> + <target name="interactive" description="Interactive Build" depends="-init"> + <echo message="--------------------------------------------------------------"/> + <echo message=" "/> + <echo message=" ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor} [${YEAR}] "/> + <echo message=" "/> + <echo message="--------------------------------------------------------------"/> + <echo message="Building with ${ant.version}"/> + <echo message="using build file ${ant.file}"/> + <echo message="--------------------------------------------------------------"/> + <echo message=" These are the most common build targets."/> + <echo message=" You can also invoke them directly; see build.xml for more info. "/> + <echo message=" Builds will be in /build directory, distributions in /dist."/> + <echo message=" "/> + <echo message=" compile ---------- compiles the source code "/> + <echo message=" docs ------------- generates the html docs"/> + <echo message=" cleandocs -------- cleans the build docs directory"/> + <echo message=" javadocs --------- generates the API documentation"/> + <echo message=" test ------------- performs the jUnit tests"/> + <echo message=" clean ------------ cleans the build directory"/> + <echo message=" dist ------------- creates src and bin distributions"/> + <echo message=" scratchpad ------- build-run scratchpad code"/> + <echo message=" contrib ---------- build-run contributed code"/> + <echo message=" generate-records - generate excel records"/> + <echo message=" generate-types --- generate word types"/> + + <property name="input.selection" value="compile"/> + <centipede-user-input name="input.selection">Please select a target </centipede-user-input> + + <pathconvert pathsep="," property="antipede.gif.url"> + <path> + <filelist dir="./tools/antipede/resources/images" files="antipede.gif"/> + </path> + </pathconvert> + <splash imageurl="file:/${antipede.gif.url}" showduration="100"/> + + <antcall target="${input.selection}"/> + + </target> - <target name="interactive" depends="-init" - description="Interactive target"> + <!-- =================================================================== --> + <!-- Interactive scratchpad builds --> + <!-- =================================================================== --> + <target name="scratchpad" depends="-init" description="Interactive Scratchpad Build"> + <echo message="--------------------------------------------------------------"/> + <echo message=" "/> + <echo message=" ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor} SCRATCHPAD "/> + <echo message=" "/> + <echo message="--------------------------------------------------------------"/> + <echo message="Building with ${ant.version}"/> + <echo message="using build file ${ant.file}"/> + <echo message="--------------------------------------------------------------"/> + <echo message=" "/> + <echo message=" These are SCRATCHPAD BUILDS. They are not guaranteed to work."/> + <echo message=" You have been warned. "/> + <echo message=" "/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" "/> + + <property name="input.selection" value=""/> + <centipede-user-input name="input.selection">Please select a target </centipede-user-input> + + <ant antfile="${xlayout.source.scratchpad.targets.dir}/${input.selection}/xbuild.xml"/> + + </target> + + <!-- =================================================================== --> + <!-- Interactive contrib builds --> + <!-- =================================================================== --> + <target name="contrib" depends="-init" description="Interactive Contributors' Build"> + <echo message="--------------------------------------------------------------"/> + <echo message=" "/> + <echo message=" ${xgump.module.project.name} ${xgump.module.project.version.major}.${xgump.module.project.version.minor} CONTRIB"/> + <echo message=" "/> + <echo message="--------------------------------------------------------------"/> + <echo message="Building with ${ant.version}"/> + <echo message="using build file ${ant.file}"/> + <echo message="--------------------------------------------------------------"/> + <echo message=" "/> + <echo message=" These are CONTRIB BUILDS. They are not guaranteed to work."/> + <echo message=" You have been warned. "/> + <echo message=" "/> + <echo message=" poibrowser - POIBrowser 0.10 GUI POI Viewer"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" -"/> + <echo message=" "/> + <property name="input.selection" value="poibrowser"/> + <centipede-user-input name="input.selection">Please select a target </centipede-user-input> + + <ant antfile="${xlayout.source.contributions.targets.dir}/${input.selection}/xbuild.xml"/> + + </target> - <splash/> - - <antcall target="call-cent"> - <param name="cent-name" value="centipede"/> - <param name="cent-target" value="compile"/> - </antcall> - </target> - <!-- ================================== --> <!-- Compile --> <!-- ================================== --> @@ -213,11 +301,35 @@ printed. </target> <!-- ================================== --> + <!-- Generate records --> + <!-- ================================== --> + + <target name="generate-records" depends="-init" + description="generate-records"> + + <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml" + target="generate-records"/> + + </target> + + <!-- ================================== --> + <!-- Generate types --> + <!-- ================================== --> + + <target name="generate-types" depends="-init" + description="generate-types"> + + <ant antfile="${xlayout.source.targets.dir}/record-generation/xbuild.xml" + target="generate-types"/> + + </target> + + <!-- ================================== --> <!-- Test the main module stuff --> <!-- ================================== --> - <target name="test-module" - depends="clean, compile, test, jar, docs" + <target name="testmodule" + depends="clean, compile, test, jar, docs, javadocs" description="Testing that all major targets work; useful before a commit"/> diff --git a/layout.xml b/layout.xml index 0b8a2dc1fe..2194280cae 100644 --- a/layout.xml +++ b/layout.xml @@ -7,6 +7,7 @@ <optional dir="./lib/optional"/> </library> <source dir="./src"> + <targets dir="./src/targets"/> <java dir="./src/java"/> <test dir="./src/testcases"/> <documentation dir="./src/documentation"> @@ -18,14 +19,17 @@ </resources> </documentation> <scratchpad dir="./src/scratchpad"> + <targets dir="./src/scratchpad/targets"/> <java dir="./src/scratchpad/src"/> <library dir="./src/scratchpad/lib"/> </scratchpad> <contributions dir="./src/contrib"> + <targets dir="./src/contrib/targets"/> <java dir="./src/contrib/src"/> <library dir="./src/contrib/lib"/> </contributions> <examples dir="./src/examples"> + <targets dir="./src/examples/targets"/> <java dir="./src/examples/src"/> <library dir="./src/examples/lib"/> </examples> diff --git a/module.xml b/module.xml index cef8072285..d4a097397e 100644 --- a/module.xml +++ b/module.xml @@ -5,19 +5,6 @@ <url href="http://jakarta.apache.org/poi/"/> - <info> - <link id="status" href="status.xml"> - Status </link> - <link id="properties" href="properties.xml"> - properties </link> - <link id="layout" href="layout.xml"> - layout </link> - <link id="build" href="build.xml"> - Build </link> - <link id="log" href="log.xml"> - log </link> - </info> - <cvs repository="jakarta"/> <mailing-lists> diff --git a/src/contrib/targets/contrib.xtarget b/src/contrib/targets/contrib.xtarget deleted file mode 100644 index e17bcf9628..0000000000 --- a/src/contrib/targets/contrib.xtarget +++ /dev/null @@ -1,30 +0,0 @@ - <!-- =================================================================== --> - <!-- Interactive contrib builds --> - <!-- =================================================================== --> - <target name="contrib" depends="init" description="Interactive Contributors' Build"> - <echo message="--------------------------------------------------------------"/> - <echo message=" "/> - <echo message=" ${fullname} ${version} CONTRIB"/> - <echo message=" "/> - <echo message="--------------------------------------------------------------"/> - <echo message="Building with ${ant.version}"/> - <echo message="using build file ${ant.file}"/> - <echo message="--------------------------------------------------------------"/> - <echo message=" "/> - <echo message=" These are CONTRIB BUILDS. They are not guaranteed to work."/> - <echo message=" You have been warned. "/> - <echo message=" "/> - <echo message=" poibrowser - POIBrowser 0.10 GUI POI Viewer"/> - <echo message=" -"/> - <echo message=" -"/> - <echo message=" -"/> - <echo message=" -"/> - <echo message=" -"/> - <echo message=" "/> - <property name="input.selection" value="poibrowser"/> - <user-input name="input.selection">Please select a target </user-input> - - <ant antfile="src/contrib/targets/${input.selection}.xml"/> - - </target> - diff --git a/src/contrib/targets/poibrowser.xml b/src/contrib/targets/poibrowser.xml deleted file mode 100644 index bfed1fb9d5..0000000000 --- a/src/contrib/targets/poibrowser.xml +++ /dev/null @@ -1,28 +0,0 @@ -<!-- try.xml ... these are trial build targets which are currently - undergoing testing. When ready they can be moved into the main build.xml --> - -<project default="poibrowser" basedir="../../" name="POIBrowser build"> - - <property name="build.root" value="build"/> - - <!-- =================================================================== --> - <!-- GUI Run Target --> - <!-- =================================================================== --> - <target name="poibrowser"> - - <property name="contrib.input.selection" value=""/> - <user-input name="contrib.input.selection">Please select a file to view </user-input> - - <java classname="org.apache.poi.contrib.poibrowser.POIBrowser" fork="true"> - <arg value="${contrib.input.selection}"/> - <classpath> - <pathelement location="${build.root}/jakarta-poi/classes"/> - <pathelement location="${build.root}/jakarta-poi/contrib/classes"/> - </classpath> - </java> - </target> - - -</project> - -<!-- End of file --> diff --git a/src/contrib/targets/poibrowser/xbuild.xml b/src/contrib/targets/poibrowser/xbuild.xml new file mode 100644 index 0000000000..58b0cd3eba --- /dev/null +++ b/src/contrib/targets/poibrowser/xbuild.xml @@ -0,0 +1,36 @@ +<project default="poibrowser" basedir="../../" name="POIBrowser build"> + + <property name="build.root" value="build"/> + + <!-- =================================================================== --> + <!-- GUI Run Target --> + <!-- =================================================================== --> + <target name="poibrowser"> + + <property name="contrib.input.selection" value=""/> + <centipede-user-input name="contrib.input.selection">Please select a file to view </centipede-user-input> + + <java classname="org.apache.poi.contrib.poibrowser.POIBrowser" fork="true"> + <arg value="${contrib.input.selection}"/> + <classpath> + <pathelement path="${xlayout.build.contributions.classes.dir}"/> + <path> + <fileset dir="${xlayout.library.dir}" casesensitive="yes"> + <patternset> + <include name="*/*.jar"/> + <include name="*/*.zip"/> + </patternset> + </fileset> + <fileset dir="${xlayout.source.contributions.library.dir}" casesensitive="yes"> + <patternset> + <include name="*.jar"/> + <include name="*.zip"/> + </patternset> + </fileset> + </path> + </classpath> + </java> + </target> + + +</project> diff --git a/src/java/Manifest.mf b/src/java/Manifest.mf deleted file mode 100755 index 348f1bdd38..0000000000 --- a/src/java/Manifest.mf +++ /dev/null @@ -1 +0,0 @@ -Manifest-Version: 1.0
\ No newline at end of file diff --git a/src/scratchpad/targets/dummy.txt b/src/scratchpad/targets/dummy.txt new file mode 100644 index 0000000000..ee37f45196 --- /dev/null +++ b/src/scratchpad/targets/dummy.txt @@ -0,0 +1 @@ +Dummy file so this directory is not deleted by CVS. It's required for the build.
\ No newline at end of file diff --git a/src/scratchpad/targets/scratchpad.xtarget b/src/scratchpad/targets/scratchpad.xtarget deleted file mode 100644 index 1476fcbb63..0000000000 --- a/src/scratchpad/targets/scratchpad.xtarget +++ /dev/null @@ -1,62 +0,0 @@ - <!-- =================================================================== --> - <!-- Interactive scratchpad builds --> - <!-- =================================================================== --> - <target name="scratchpad" depends="prepare" description="Interactive Scratchpad Build"> - <echo message="--------------------------------------------------------------"/> - <echo message=" "/> - <echo message=" ${fullname} ${version} SCRATCHPAD "/> - <echo message=" "/> - <echo message="--------------------------------------------------------------"/> - <echo message="Building with ${ant.version}"/> - <echo message="using build file ${ant.file}"/> - <echo message="--------------------------------------------------------------"/> - <echo message=" "/> - <echo message=" These are SCRATCHPAD BUILDS. They are not guaranteed to work."/> - <echo message=" You have been warned. "/> - <echo message=" "/> - <echo message=" generate-records - add description here"/> - <echo message=" generate-types - add description here"/> - <echo message=" --------------"/> - <echo message=" --------------"/> - <echo message=" --------------"/> - <echo message=" --------------"/> - <echo message=" "/> - - <property name="input.selection" value=""/> - <user-input name="input.selection">Please select a target </user-input> - - <antcall target="${input.selection}"/> - - </target> - - <target name="generate-records" depends="prepare" - description="Generates the record source code"> - - <java classname="org.apache.poi.dev.RecordGenerator" fork="yes"> - <arg value="src/records/definitions"/> - <arg value="src/records/styles"/> - <arg value="src/java"/> - <arg value="src/testcases"/> - <classpath> - <path refid="scratchpad.classpath"/> - <pathelement location="${build.scratchpad.dest}"/> - </classpath> - </java> - - </target> - - <target name="generate-types" depends="prepare" - description="Generates the record source code"> - - <java classname="org.apache.poi.dev.RecordGenerator" fork="yes"> - <arg value="src/types/definitions"/> - <arg value="src/types/styles"/> - <arg value="src/scratchpad/src"/> - <arg value="src/scratchpad/testcases"/> - <classpath> - <path refid="scratchpad.classpath"/> - <pathelement location="${build.scratchpad.dest}"/> - </classpath> - </java> - - </target>
\ No newline at end of file diff --git a/src/targets/interactive.xtarget b/src/targets/interactive.xtarget deleted file mode 100644 index 3dce9949d5..0000000000 --- a/src/targets/interactive.xtarget +++ /dev/null @@ -1,34 +0,0 @@ - <!-- =================================================================== --> - <!-- Interactive build --> - <!-- =================================================================== --> - <target name="interactive" description="Interactive Build" depends="init"> - <echo message="--------------------------------------------------------------"/> - <echo message=" "/> - <echo message=" ${fullname} ${version} [${year}] "/> - <echo message=" "/> - <echo message="--------------------------------------------------------------"/> - <echo message="Building with ${ant.version}"/> - <echo message="using build file ${ant.file}"/> - <echo message="--------------------------------------------------------------"/> - <echo message=" These are the most common build targets."/> - <echo message=" You can also invoke them directly; see build.xml for more info. "/> - <echo message=" Builds will be in /build directory, distributions in /dist."/> - <echo message=" "/> - <echo message=" compile ---------- compiles the source code "/> - <echo message=" docs ------------- generates the html docs"/> - <echo message=" cleandocs -------- cleans the build docs directory"/> - <echo message=" javadocs --------- generates the API documentation"/> - <echo message=" test ------------- performs the jUnit tests"/> - <echo message=" clean ------------ cleans the build directory"/> - <echo message=" dist ------------- creates src and bin distributions"/> - <echo message=" scratchpad ------- build-run scratchpad code"/> - <echo message=" contrib ---------- build-run contributed code"/> - <echo message=" generate-records - generate excel records"/> - <echo message=" generate-types --- generate word types"/> - - <property name="input.selection" value="compile"/> - <user-input name="input.selection">Please select a target </user-input> - - <antcall target="${input.selection}"/> - - </target> diff --git a/src/targets/project.xtarget b/src/targets/project.xtarget deleted file mode 100644 index 8ce67dfe12..0000000000 --- a/src/targets/project.xtarget +++ /dev/null @@ -1,10 +0,0 @@ - <!-- =================================================================== --> - <!-- Extra targets for this project --> - <!-- =================================================================== --> - - - <!-- - <target name="ABC" description="Abc" depends="init"> - - </target> - --> diff --git a/src/targets/record-generation/xbuild.xml b/src/targets/record-generation/xbuild.xml new file mode 100644 index 0000000000..f81a0ae0d2 --- /dev/null +++ b/src/targets/record-generation/xbuild.xml @@ -0,0 +1,60 @@ +<project default="generate-records" basedir="../../" name="Record Generation build"> + + <target name="generate-records" + description="Generates the record source code"> + + <java classname="org.apache.poi.dev.RecordGenerator" fork="yes"> + <arg value="src/records/definitions"/> + <arg value="src/records/styles"/> + <arg value="src/java"/> + <arg value="src/testcases"/> + <classpath> + <path> + <pathelement path="${xlayout.build.classes.dir}"/> + <fileset dir="${xlayout.library.dir}" casesensitive="yes"> + <patternset> + <include name="*/*.jar"/> + <include name="*/*.zip"/> + </patternset> + </fileset> + <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> + <patternset> + <include name="*.jar"/> + <include name="*.zip"/> + </patternset> + </fileset> + </path> + </classpath> + </java> + + </target> + + <target name="generate-types" + description="Generates the record source code"> + + <java classname="org.apache.poi.dev.RecordGenerator" fork="yes"> + <arg value="src/types/definitions"/> + <arg value="src/types/styles"/> + <arg value="src/scratchpad/src"/> + <arg value="src/scratchpad/testcases"/> + <classpath> + <pathelement path="${xlayout.build.classes.dir}"/> + <path> + <fileset dir="${xlayout.library.dir}" casesensitive="yes"> + <patternset> + <include name="*/*.jar"/> + <include name="*/*.zip"/> + </patternset> + </fileset> + <fileset dir="${xlayout.source.scratchpad.library.dir}" casesensitive="yes"> + <patternset> + <include name="*.jar"/> + <include name="*.zip"/> + </patternset> + </fileset> + </path> + </classpath> + </java> + + </target> +</project>
\ No newline at end of file diff --git a/src/targets/try.xml b/src/targets/try.xml deleted file mode 100644 index 695b2253c8..0000000000 --- a/src/targets/try.xml +++ /dev/null @@ -1,15 +0,0 @@ -<!-- try.xml ... these are trial build targets which are currently - undergoing testing. When ready they can be moved into the main build.xml --> - -<project default="trial-init" basedir="." name="Trial builds"> - - <!-- =================================================================== --> - <!-- Initialization target --> - <!-- =================================================================== --> - <target name="trial-init"> - - </target> - -</project> - -<!-- End of file --> diff --git a/status.xml b/status.xml index 08748cc30a..bdf093f940 100644 --- a/status.xml +++ b/status.xml @@ -2,6 +2,21 @@ <?xml-stylesheet type="text/xsl" href="tools/antipede/resources/stylesheets/status.xsl"?> <status> + <descriptors> + <descriptor id="status" href="status.xml"> + Status </descriptor> + <descriptor id="module" href="module.xml"> + Module </descriptor> + <descriptor id="properties" href="properties.xml"> + Properties </descriptor> + <descriptor id="layout" href="layout.xml"> + Layout </descriptor> + <descriptor id="build" href="build.xml"> + Build </descriptor> + <descriptor id="log" href="log.xml"> + Log </descriptor> + </descriptors> + <developers> <!-- in strict alphabetical order --> <person name="Andrew C. Oliver" id="acoliver" email="acoliver@apache.org"/> diff --git a/tools/antipede/build.xtarget b/tools/antipede/build.xtarget index 5326d5855e..e3b9c0492e 100644 --- a/tools/antipede/build.xtarget +++ b/tools/antipede/build.xtarget @@ -49,7 +49,9 @@ </patternset> </fileset> </antipede-foreach> - + + <delete dir="${cents.dir}/META-INF"/> + <mkdir dir="${temp.dir}"/> <delete file="${temp.dir}/${task.properties.name}"/> @@ -96,4 +98,4 @@ inheritAll="true" dir="." target="${cent-target}" /> - </target>
\ No newline at end of file + </target>
\ No newline at end of file diff --git a/tools/antipede/resources/images/antipede.gif b/tools/antipede/resources/images/antipede.gif Binary files differnew file mode 100644 index 0000000000..22c9499f9d --- /dev/null +++ b/tools/antipede/resources/images/antipede.gif diff --git a/tools/antipede/resources/stylesheets/module.xsl b/tools/antipede/resources/stylesheets/module.xsl index ea37aa9b24..ca712285ad 100644 --- a/tools/antipede/resources/stylesheets/module.xsl +++ b/tools/antipede/resources/stylesheets/module.xsl @@ -15,10 +15,6 @@ <xsl:value-of select="module/url/@href" /> </xsl:attribute><xsl:value-of select="module/url/@href" /></a> <br/>cvs repository: <xsl:value-of select="module/cvs/@repository" /> - <xsl:for-each select = "module/info/link"> - <br/><xsl:value-of select="@id" />: <a><xsl:attribute name = "href" ><xsl:value-of select="@href" /></xsl:attribute> - <xsl:value-of select="." /></a> - </xsl:for-each> <xsl:for-each select = "module/mailing-lists/mailing-list"> <br/><xsl:value-of select="@user" /> mailing list:  <a><xsl:attribute name = "href" >mailto:<xsl:value-of select="@mail" /></xsl:attribute> diff --git a/tools/antipede/resources/stylesheets/status.xsl b/tools/antipede/resources/stylesheets/status.xsl index 2a34c956f0..d1630e4186 100644 --- a/tools/antipede/resources/stylesheets/status.xsl +++ b/tools/antipede/resources/stylesheets/status.xsl @@ -3,6 +3,14 @@ <xsl:output method = "html" encoding="Windows-1252" /> <xsl:template match="status"> + <h1>Project Status</h1> + + <h2>Descriptors</h2> + <xsl:for-each select = "descriptors/descriptor"> + <br/><xsl:value-of select="@id" />: <a><xsl:attribute name = "href" ><xsl:value-of select="@href" /></xsl:attribute> + <xsl:value-of select="." /></a> + </xsl:for-each> + <h2>Developers</h2> <table> <xsl:for-each select = "developers/person"> |