<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://freemind.sourceforge.io/wiki/index.php?action=history&amp;feed=atom&amp;title=User%3AJiangxin%2FPatch_load_mm_file_with_mmx_file</id>
	<title>User:Jiangxin/Patch load mm file with mmx file - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://freemind.sourceforge.io/wiki/index.php?action=history&amp;feed=atom&amp;title=User%3AJiangxin%2FPatch_load_mm_file_with_mmx_file"/>
	<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;action=history"/>
	<updated>2026-05-14T07:04:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.7</generator>
	<entry>
		<id>https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=10755&amp;oldid=prev</id>
		<title>Jiangxin: remove spam.</title>
		<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=10755&amp;oldid=prev"/>
		<updated>2009-02-14T06:02:47Z</updated>

		<summary type="html">&lt;p&gt;remove spam.&lt;/p&gt;
&lt;a href=&quot;https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=10755&amp;amp;oldid=7657&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Jiangxin</name></author>
	</entry>
	<entry>
		<id>https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7657&amp;oldid=prev</id>
		<title>Monluna: wow account,wow accounts,buy wow account,world warcraft account</title>
		<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7657&amp;oldid=prev"/>
		<updated>2008-12-04T05:48:03Z</updated>

		<summary type="html">&lt;p&gt;wow account,wow accounts,buy wow account,world warcraft account&lt;/p&gt;
&lt;a href=&quot;https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=7657&amp;amp;oldid=7241&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Monluna</name></author>
	</entry>
	<entry>
		<id>https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7241&amp;oldid=prev</id>
		<title>Jiangxin: add signature and time</title>
		<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=7241&amp;oldid=prev"/>
		<updated>2007-03-15T09:26:56Z</updated>

		<summary type="html">&lt;p&gt;add signature and time&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:26, 15 March 2007&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I write the patch at 2005, I even don&amp;#039;t know the basic knowledge of optimization of a XSLT.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;When I write the patch at 2005, I even don&amp;#039;t know the basic knowledge of optimization of a XSLT.  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&amp;lt;s&gt;Warning: this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!&amp;lt;/s&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&amp;lt;s&gt;&#039;&#039;&#039;Java expert/FreeMind Funs, can you help me to make it usable.&#039;&#039;&#039;&amp;lt;/s&gt; Thank you.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last week when I feel it&amp;#039;s time to upgrade to freemind 0.9, I overview and rewrite the xslt and the patch.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Last week when I feel it&amp;#039;s time to upgrade to freemind 0.9, I overview and rewrite the xslt and the patch.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;s&amp;gt;Warning&lt;/del&gt;: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!&amp;lt;/s&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- [[User&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jiangxin|Jiangxin]] 02:26&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;15 Mar 2007 (PDT)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;s&amp;gt;&amp;#039;&amp;#039;&amp;#039;Java expert/FreeMind Funs&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;can you help me to make it usable.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/s&amp;gt; Thank you.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==the XSLT==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==the XSLT==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jiangxin</name></author>
	</entry>
	<entry>
		<id>https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4322&amp;oldid=prev</id>
		<title>Jiangxin: fixed low performance xslt</title>
		<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4322&amp;oldid=prev"/>
		<updated>2007-03-15T09:18:50Z</updated>

		<summary type="html">&lt;p&gt;fixed low performance xslt&lt;/p&gt;
&lt;a href=&quot;https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;amp;diff=4322&amp;amp;oldid=4321&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Jiangxin</name></author>
	</entry>
	<entry>
		<id>https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4321&amp;oldid=prev</id>
		<title>Jiangxin: initial</title>
		<link rel="alternate" type="text/html" href="https://freemind.sourceforge.io/wiki/index.php?title=User:Jiangxin/Patch_load_mm_file_with_mmx_file&amp;diff=4321&amp;oldid=prev"/>
		<updated>2006-04-06T17:48:45Z</updated>

		<summary type="html">&lt;p&gt;initial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==What is .mmx file?==&lt;br /&gt;
.mmx file has the same file structure as FreeMind .mm file, but It only contains the unnecessary and frequently changed attributes. This file is &amp;#039;&amp;#039;&amp;#039;NOT&amp;#039;&amp;#039;&amp;#039; suitable for version control system.&lt;br /&gt;
&lt;br /&gt;
How the file is generated? Please see this link: [[User:Jiangxin/Patch_save_extra_attributes_outof_mmfile]].&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning: this patch is immature, and it can cause trouble if your FreeMind .mm file is as large as 200KB!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Java expert/FreeMind Funs, can you help me to make it usable.&amp;#039;&amp;#039;&amp;#039; Thank you.&lt;br /&gt;
&lt;br /&gt;
===the XSLT===&lt;br /&gt;
My implementation is using a XSLT file to join the .mmx file with .mm file in runtime. The XSLT is below:&lt;br /&gt;
* file : &amp;#039;&amp;#039;freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
	xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
		indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:param name=&amp;quot;mmx_file&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;map&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;map&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
		&amp;lt;/map&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;node&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;mmx_node&amp;quot; select=&amp;quot;document($mmx_file)&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;$mmx_node//node[@ID=current()/@ID]&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:when test=&amp;quot;local-name(.) = &amp;#039;FOLDED&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
							&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:copy-of&lt;br /&gt;
						select=&amp;quot;$mmx_node//node[@ID=current()/@ID]/@*&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
	  &amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problem 1: too slow ===&lt;br /&gt;
But is is very slow if .mm file and .mmx is as big as 200KB. I test my file using xsltproc like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
$ time xsltproc --stringparam mmx_file subject-forum.mmx freemind_join_mm_mmx.xslt subject-forum.mm &amp;gt; jx.mm&lt;br /&gt;
&lt;br /&gt;
real    4m33.148s&lt;br /&gt;
user    4m30.093s&lt;br /&gt;
sys     0m0.015s&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problem 2: memery killer ===&lt;br /&gt;
load without .mmx file, only 40MB memery usage. But if load .mm file with .mmx file, 80MB maybe. It terrible, where is Java GC? Just a tale of sun. (Sorry, I am not familiar with Java.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== My Immature Patch ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Index: freemind/freemind/modes/mindmapmode/MindMapMapModel.java&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/freemind/modes/mindmapmode/MindMapMapModel.java	(.../tags/RELEASE-0-8-0)	(revision 2)&lt;br /&gt;
+++ freemind/freemind/modes/mindmapmode/MindMapMapModel.java	(.../branches/WHFM-0-8-0)	(working copy)&lt;br /&gt;
@@ -519,21 +562,37 @@&lt;br /&gt;
         }&lt;br /&gt;
         // the resulting file is accessed by the reader:&lt;br /&gt;
         Reader reader = null;&lt;br /&gt;
-        if (mapStart.equals(expectedStartString)&lt;br /&gt;
-                || mapStart.equals(expectedAlternativeStartString)) {&lt;br /&gt;
-            // actual version:&lt;br /&gt;
-            reader = getActualReader(file);&lt;br /&gt;
-        } else {&lt;br /&gt;
+        // join .mmx with .mm file&lt;br /&gt;
+        reader = getActualReader(file);&lt;br /&gt;
+&lt;br /&gt;
+        if (! mapStart.equals(expectedStartString)&lt;br /&gt;
+                &amp;amp;&amp;amp; ! mapStart.equals(expectedAlternativeStartString)) {&lt;br /&gt;
             // older version:&lt;br /&gt;
-            reader = getUpdateReader(file);&lt;br /&gt;
+            reader = getUpdateReader(reader, file.getName());&lt;br /&gt;
         }&lt;br /&gt;
         try {&lt;br /&gt;
             mapElement.parseFromReader(reader);&lt;br /&gt;
@@ -573,14 +602,15 @@&lt;br /&gt;
 &lt;br /&gt;
     /** Creates a reader that pipes the input file through a XSLT-Script that&lt;br /&gt;
      *  updates the version to the current.&lt;br /&gt;
-     * @param file&lt;br /&gt;
+     * @param reader&lt;br /&gt;
+     * @param filename&lt;br /&gt;
      * @return &lt;br /&gt;
      * @throws IOException&lt;br /&gt;
      */&lt;br /&gt;
-    private Reader getUpdateReader(File file) throws IOException {&lt;br /&gt;
+    private Reader getUpdateReader(Reader reader, String filename) throws IOException {&lt;br /&gt;
         StringWriter writer = null;&lt;br /&gt;
         InputStream inputStream = null;&lt;br /&gt;
-        logger.info(&amp;quot;Updating the file &amp;quot;+file.getName()+&amp;quot; to the current version.&amp;quot;);&lt;br /&gt;
+        logger.info(&amp;quot;Updating the file &amp;quot;+filename+&amp;quot; to the current version.&amp;quot;);&lt;br /&gt;
         try{&lt;br /&gt;
             // try to convert map with xslt:&lt;br /&gt;
             URL updaterUrl=null;&lt;br /&gt;
@@ -598,12 +629,12 @@&lt;br /&gt;
             // create an instance of TransformerFactory&lt;br /&gt;
             TransformerFactory transFact = TransformerFactory.newInstance();&lt;br /&gt;
             Transformer trans = transFact.newTransformer(xsltSource);&lt;br /&gt;
-            trans.transform(new StreamSource(file), result);&lt;br /&gt;
-            logger.info(&amp;quot;Updating the file &amp;quot;+file.getName()+&amp;quot; to the current version. Done.&amp;quot;);&lt;br /&gt;
+            trans.transform(new StreamSource(reader), result);&lt;br /&gt;
+            logger.info(&amp;quot;Updating the file &amp;quot;+filename+&amp;quot; to the current version. Done.&amp;quot;);&lt;br /&gt;
         } catch(Exception ex) {&lt;br /&gt;
             ex.printStackTrace();&lt;br /&gt;
             // exception: we take the file itself:&lt;br /&gt;
-            return getActualReader(file);&lt;br /&gt;
+            return reader;&lt;br /&gt;
         } finally {&lt;br /&gt;
             if(inputStream!= null) {&lt;br /&gt;
                 inputStream.close();&lt;br /&gt;
@@ -618,12 +649,99 @@&lt;br /&gt;
     /** Creates a default reader that just reads the given file.&lt;br /&gt;
      * @param file&lt;br /&gt;
      * @return&lt;br /&gt;
-     * @throws FileNotFoundException&lt;br /&gt;
+     * @throws IOException &lt;br /&gt;
      */&lt;br /&gt;
-    private Reader getActualReader(File file) throws FileNotFoundException {&lt;br /&gt;
-        return new BufferedReader(new FileReader(file));&lt;br /&gt;
+    private Reader getActualReaderXml(File file) throws IOException {&lt;br /&gt;
+        try&lt;br /&gt;
+        {&lt;br /&gt;
+            TransformerFactory tf = TransformerFactory.newInstance();&lt;br /&gt;
+            Transformer transformer = tf.newTransformer();&lt;br /&gt;
+            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();&lt;br /&gt;
+            DocumentBuilder domBuilder = domFactory.newDocumentBuilder();&lt;br /&gt;
+&lt;br /&gt;
+            Document doc = domBuilder.parse(file);&lt;br /&gt;
+            Source src = new DOMSource(doc);&lt;br /&gt;
+            StringWriter buffwriter = new StringWriter();&lt;br /&gt;
+            StreamResult result = new StreamResult(buffwriter);&lt;br /&gt;
+            transformer.transform(src, result);&lt;br /&gt;
+&lt;br /&gt;
+            return new StringReader(buffwriter.toString());&lt;br /&gt;
+        }&lt;br /&gt;
+        catch(Exception exp)&lt;br /&gt;
+        {&lt;br /&gt;
+        	exp.printStackTrace();&lt;br /&gt;
+        }&lt;br /&gt;
+&lt;br /&gt;
+        return new BufferedReader(new FileReader(file));    	&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
+    private Reader getActualReader(File file) throws IOException {&lt;br /&gt;
+        // load .mmx file...&lt;br /&gt;
+        String ext = Tools.getExtension(file.getName());&lt;br /&gt;
+        String mmxFileName = &amp;quot;&amp;quot;;&lt;br /&gt;
+&lt;br /&gt;
+        if(!ext.equals(&amp;quot;mm&amp;quot;)) &lt;br /&gt;
+        {&lt;br /&gt;
+        	mmxFileName = file.getName()+&amp;quot;.mmx&amp;quot;;&lt;br /&gt;
+        }&lt;br /&gt;
+        else &lt;br /&gt;
+        {&lt;br /&gt;
+        	mmxFileName = Tools.removeExtension(file.getName()) + &amp;quot;.mmx&amp;quot;;&lt;br /&gt;
+        }&lt;br /&gt;
+        File mmxfile = new File(file.getParent(), mmxFileName);&lt;br /&gt;
+        &lt;br /&gt;
+        if (!mmxfile.exists())&lt;br /&gt;
+        {&lt;br /&gt;
+        	return getActualReaderXml(file);&lt;br /&gt;
+        }&lt;br /&gt;
+&lt;br /&gt;
+        URL updaterUrl = null;&lt;br /&gt;
+        InputStream inputStream = null;&lt;br /&gt;
+        Source xsltSource = null;&lt;br /&gt;
+        StringWriter buffwriter = null;&lt;br /&gt;
+        Result result = null;&lt;br /&gt;
+        TransformerFactory tf = null;&lt;br /&gt;
+        Transformer transformer = null;&lt;br /&gt;
+        String mmxFileFullName = file.getParent() + &amp;quot;/&amp;quot; + mmxFileName;&lt;br /&gt;
+        try {&lt;br /&gt;
+            // try to convert map with xslt:&lt;br /&gt;
+            updaterUrl = getFrame().getResource(&lt;br /&gt;
+                    &amp;quot;freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt&amp;quot;);&lt;br /&gt;
+            if (updaterUrl == null) {&lt;br /&gt;
+                throw new IllegalArgumentException(&lt;br /&gt;
+                        &amp;quot;freemind_join_mm_mmx.xslt not found.&amp;quot;);&lt;br /&gt;
+            }&lt;br /&gt;
+            inputStream = updaterUrl.openStream();&lt;br /&gt;
+            xsltSource = new StreamSource(inputStream);&lt;br /&gt;
+            // get output:&lt;br /&gt;
+            buffwriter = new StringWriter();&lt;br /&gt;
+            result = new StreamResult(buffwriter);&lt;br /&gt;
+            // create an instance of TransformerFactory&lt;br /&gt;
+            tf = TransformerFactory.newInstance();&lt;br /&gt;
+            transformer = tf.newTransformer(xsltSource);&lt;br /&gt;
+            transformer.setParameter(&amp;quot;mmx_file&amp;quot;, mmxFileFullName);&lt;br /&gt;
+            transformer.transform(new StreamSource(file), result);&lt;br /&gt;
+&lt;br /&gt;
+        } catch (Exception ex) {&lt;br /&gt;
+            ex.printStackTrace();&lt;br /&gt;
+            // exception: we take the file itself:&lt;br /&gt;
+            return getActualReaderXml(file);&lt;br /&gt;
+        } finally {&lt;br /&gt;
+            if (inputStream != null) {&lt;br /&gt;
+                inputStream.close();&lt;br /&gt;
+            }&lt;br /&gt;
+            if (buffwriter != null) {&lt;br /&gt;
+                buffwriter.close();&lt;br /&gt;
+            }&lt;br /&gt;
+            inputStream = null;&lt;br /&gt;
+            xsltSource = null;&lt;br /&gt;
+            updaterUrl = null;&lt;br /&gt;
+            result = null;&lt;br /&gt;
+            transformer = null;&lt;br /&gt;
+            tf = null;&lt;br /&gt;
+        }&lt;br /&gt;
+        return new StringReader(buffwriter.getBuffer().toString());    }&lt;br /&gt;
+&lt;br /&gt;
     //&lt;br /&gt;
     // cut&amp;#039;n&amp;#039;paste&lt;br /&gt;
     //&lt;br /&gt;
Index: freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt	(.../tags/RELEASE-0-8-0)	(revision 0)&lt;br /&gt;
+++ freemind/freemind/modes/mindmapmode/freemind_join_mm_mmx.xslt	(.../branches/WHFM-0-8-0)	(revision 28)&lt;br /&gt;
@@ -0,0 +1,45 @@&lt;br /&gt;
+&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
+	xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:output method=&amp;quot;xml&amp;quot; version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
+		indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:param name=&amp;quot;mmx_file&amp;quot; /&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;map&amp;quot;&amp;gt;&lt;br /&gt;
+		&amp;lt;map&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
+		&amp;lt;/map&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;node&amp;quot;&amp;gt;&lt;br /&gt;
+		&amp;lt;xsl:param name=&amp;quot;mmx_node&amp;quot; select=&amp;quot;document($mmx_file)&amp;quot; /&amp;gt;&lt;br /&gt;
+		&amp;lt;xsl:copy&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
+				&amp;lt;xsl:when test=&amp;quot;$mmx_node//node[@ID=current()/@ID]&amp;quot;&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;&lt;br /&gt;
+						&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
+							&amp;lt;xsl:when test=&amp;quot;local-name(.) = &amp;#039;FOLDED&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
+							&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
+							&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
+								&amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
+							&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
+						&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
+					&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:copy-of&lt;br /&gt;
+						select=&amp;quot;$mmx_node//node[@ID=current()/@ID]/@*&amp;quot; /&amp;gt;&lt;br /&gt;
+				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
+				&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
+					&amp;lt;xsl:copy-of select=&amp;quot;@*&amp;quot; /&amp;gt;&lt;br /&gt;
+				&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
+			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
+			&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;
+		&amp;lt;/xsl:copy&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+	&amp;lt;xsl:template match=&amp;quot;*&amp;quot;&amp;gt;&lt;br /&gt;
+	  &amp;lt;xsl:copy-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
+	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
+&lt;br /&gt;
+&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
Index: freemind/build.xml&lt;br /&gt;
===================================================================&lt;br /&gt;
--- freemind/build.xml	(.../tags/RELEASE-0-8-0)	(revision 2)&lt;br /&gt;
+++ freemind/build.xml	(.../branches/WHFM-0-8-0)	(working copy)&lt;br /&gt;
@@ -284,6 +284,7 @@&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;Resources*&amp;quot;/&amp;gt;&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;mindmap_menus.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 				&amp;lt;include name=&amp;quot;**/freemind_version_updater.xslt&amp;quot;/&amp;gt;&lt;br /&gt;
+				&amp;lt;include name=&amp;quot;**/freemind_join_mm_mmx.xslt&amp;quot;/&amp;gt;&lt;br /&gt;
 			&amp;lt;/fileset&amp;gt;&lt;br /&gt;
 		&amp;lt;/jar&amp;gt;&lt;br /&gt;
 	&amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jiangxin</name></author>
	</entry>
</feed>