我在Matlab中进行了许多计算,并且厌倦了将所有不同的表格剪切并粘贴到Graphpad Prism中的方法,这是我需要的最终格式。我想自动生成可以通过以下方式打开的文件: Graphpad,但我对如何执行此操作有些困惑。我知道我可以在Graphpad和Matlab中导入和导出XML文件,因此我正在练习创建模板。我在Graphpad中制作了一组模拟的数据文件,其中的XML文件如下所示:
<dir>
<xsl:for-each select="ps:Info">
<li>
<a>
<xsl:attribute name="href">
#<xsl:value-of select="@ID"/>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
</a>
</li>
</xsl:for-each>
<xsl:for-each select="ps:Table|ps:HugeTable">
<li>
<a>
<xsl:attribute name="href">
#<xsl:value-of select="@ID"/>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
</a>
<dir>
<xsl:for-each select="ps:Info">
<li>
<a>
<xsl:attribute name="href">
#<xsl:value-of select="@ID"/>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
</a>
</li>
</xsl:for-each>
</dir>
</li>
</xsl:for-each>
</dir>
<hr/>
<xsl:apply-templates select="ps:Info"/>
<br/>
<hr/>
<br/>
<xsl:for-each select="ps:Table|ps:HugeTable">
<xsl:apply-templates select="ps:Title"/>
<a>
<xsl:attribute name="name">
<xsl:value-of select="@ID"/>
</xsl:attribute>
</a>
<xsl:variable name="width" select="100 div count (*/ps:Subcolumn)"/>
<xsl:variable name="xFormat" select="./@XFormat"/>
<xsl:variable name="yFormat" select="./@YFormat"/>
<xsl:variable name="nRepl" select="./@replicates"/>
<xsl:variable name="isXAdvancedColumn" select="boolean(($xFormat='date' or $xFormat='time' or $xFormat='startenddate') and count(ps:XAdvancedColumn) > 0)"/>
<xsl:variable name="isXAdvancedSubcol" select="boolean(($xFormat='startenddate') or count(ps:XAdvancedColumn/ps:Subcolumn/ps:Title) > 0)"/>
<xsl:variable name="isXSubcol" select="boolean(($xFormat='error' or count(ps:XColumn/ps:Subcolumn/ps:Title) > 0) and not ($isXAdvancedColumn))"/>
<xsl:variable name="isYSubcol" select="boolean(($yFormat='replicates'and ./@Replicates>1) or
($yFormat!='text'and $yFormat!='replicates') or
count(ps:YColumn/ps:Subcolumn/ps:Title)>0)"/>
<xsl:variable name="isYSubColNameCustom" select="boolean($isYSubcol and count(ps:SubColumnTitles)>0)"/>
<TABLE BORDER="1" CELLSPACING="0">
<TR>
<xsl:for-each select="ps:RowTitlesColumn">
<TD align="center">
<xsl:attribute name="rowspan">
<xsl:if test="$isXSubcol or $isXAdvancedSubcol or $isYSubcol">2</xsl:if>
</xsl:attribute>
<BR/>
</TD>
</xsl:for-each>
<xsl:if test="not ($isXAdvancedColumn)">
<xsl:for-each select="ps:XColumn">
<TD align="center">
<xsl:attribute name="rowspan">
<xsl:if test="$isYSubcol and not($isXSubcol)">2</xsl:if>
</xsl:attribute>
<xsl:attribute name="colspan">
<xsl:value-of select="./@Subcolumns"/>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">X-Title</xsl:if>
</TD>
</xsl:for-each>
</xsl:if>
<xsl:if test="$isXAdvancedColumn">
<xsl:for-each select="ps:XAdvancedColumn">
<TD align="center">
<xsl:attribute name="rowspan">
<xsl:if test="$isYSubcol and not($isXAdvancedSubcol)">2</xsl:if>
</xsl:attribute>
<xsl:attribute name="colspan">
<xsl:value-of select="./@Subcolumns"/>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">X-Title</xsl:if>
</TD>
</xsl:for-each>
</xsl:if>
<xsl:for-each select="ps:YColumn">
<xsl:variable name="DefColName2" select="(position()-1) mod 26"/>
<xsl:variable name="DefColName1" select="(position()-1-$DefColName2) div 26"/>
<TD align="center">
<xsl:attribute name="colspan">
<xsl:value-of select="./@Subcolumns"/>
</xsl:attribute>
<xsl:attribute name="rowspan">
<xsl:if test="($isXSubcol or $isXAdvancedSubcol) and not($isYSubcol)">2</xsl:if>
</xsl:attribute>
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">
<xsl:value-of select="'Data Set-'"/>
<xsl:if test="$DefColName1 > 0">
<xsl:value-of select="substring($Chars,$DefColName1,1)"/>
</xsl:if>
<xsl:value-of select="substring($Chars,$DefColName2+1,1)"/>
</xsl:if>
</TD>
</xsl:for-each>
</TR>
<xsl:if test="$isXSubcol or $isXAdvancedSubcol or $isYSubcol">
<TR>
<xsl:if test="$isXSubcol">
<xsl:for-each select="ps:XColumn">
<xsl:for-each select="ps:Subcolumn">
<TD align="center">
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">
<xsl:choose>
<xsl:when test="position()=1">
<B>X</B>
</xsl:when>
<xsl:when test="position()=2">
<B>Err.Bar</B>
</xsl:when>
</xsl:choose>
</xsl:if>
</TD>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
<xsl:if test="$isXAdvancedSubcol">
<xsl:for-each select="ps:XAdvancedColumn">
<xsl:for-each select="ps:Subcolumn">
<TD align="center">
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">
<xsl:choose>
<xsl:when test="position()=1">
<B>Starting Date</B>
</xsl:when>
<xsl:when test="position()=2">
<B>Ending Date</B>
</xsl:when>
</xsl:choose>
</xsl:if>
</TD>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
<xsl:if test="$isYSubcol">
<xsl:for-each select="ps:YColumn">
<xsl:variable name="DefColName2" select="(position()-1) mod 26"/>
<xsl:variable name="DefColName1" select="(position()-1-$DefColName2) div 26"/>
<xsl:variable name="YColumnNdx" select="position()"/>
<xsl:for-each select="ps:Subcolumn">
<TD align="center">
<xsl:apply-templates select="ps:Title"/>
<xsl:if test="count(ps:Title)=0 or ps:Title=''">
<xsl:if test="$yFormat='replicates' or $yFormat='text'">
<B>
<xsl:if test="$DefColName1 > 0">
<xsl:value-of select="substring($Chars,$DefColName1,1)"/>
</xsl:if>
<xsl:choose>
<xsl:when test="$isYSubColNameCustom">
<xsl:variable name="subColCustomNamePos" select="position()"/>
<xsl:for-each select="../../ps:SubColumnTitles/ps:Subcolumn">
<xsl:if test="position()=$subColCustomNamePos">
<xsl:choose>
<xsl:when test="../../ps:SubColumnTitles/@OwnSet='1'">
<xsl:variable name="DItemsCount" select="count(./ps:d)"/>
<xsl:choose>
<xsl:when test="$DItemsCount<$YColumnNdx or ./ps:d[$YColumnNdx]=''">
<xsl:value-of select="substring($Chars,$DefColName2+1,1)"/>
:Y<xsl:value-of select="position()"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="./ps:d[$YColumnNdx]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="../../ps:SubColumnTitles/@OwnSet='0'">
<xsl:variable name="DItemsCount" select="count(./ps:d)"/>
<xsl:choose>
<xsl:when test="$DItemsCount<1 or ./ps:d[1]=''">
<xsl:value-of select="substring($Chars,$DefColName2+1,1)"/>
:Y<xsl:value-of select="position()"/>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="./ps:d[1]"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="ps:d"/>
<xsl:if test="ps:d=''">
<xsl:value-of select="substring($Chars,$DefColName2+1,1)"/>
:Y<xsl:value-of select="position()"/>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($Chars,$DefColName2+1,1)"/>
:Y<xsl:value-of select="position()"/>
</xsl:otherwise>
</xsl:choose>
</B>
</xsl:if>
<xsl:if test="$yFormat!='replicates' and $yFormat!='text'">
<xsl:if test="not($yFormat='replicates' or $yFormat='text')">
<xsl:if test="position()=1">
<B>Mean</B>
</xsl:if>
<xsl:if test="position()!=1">
<xsl:choose>
<xsl:when test="$yFormat='SD'">
<B>SD</B>
</xsl:when>
<xsl:when test="$yFormat='SE'">
<B>SEM</B>
</xsl:when>
<xsl:when test="$yFormat='CV'">
<B>%CV</B>
</xsl:when>
<xsl:when test="$yFormat='SDN'">
<xsl:if test="position()=2">
<B>SD</B>
</xsl:if>
<xsl:if test="position()=3">
<B>N</B>
</xsl:if>
</xsl:when>
<xsl:when test="$yFormat='SEN'">
<xsl:if test="position()=2">
<B>SEM</B>
</xsl:if>
<xsl:if test="position()=3">
<B>N</B>
</xsl:if>
</xsl:when>
<xsl:when test="$yFormat='CVN'">
<xsl:if test="position()=2">
<B>%CV</B>
</xsl:if>
<xsl:if test="position()=3">
<B>N</B>
</xsl:if>
</xsl:when>
<xsl:when test="$yFormat='low-high'">
<xsl:if test="position()=2">
<B>+Error</B>
</xsl:if>
<xsl:if test="position()=3">
<B>-Error</B>
</xsl:if>
</xsl:when>
<xsl:when test="$yFormat='upper-lower-limits'">
<xsl:if test="position()=2">
<B>UpperLimit</B>
</xsl:if>
<xsl:if test="position()=3">
<B>LowerLimit</B>
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:if>
</xsl:if>
</xsl:if>
</TD>
</xsl:for-each>
</xsl:for-each>
</xsl:if>
</TR>
</xsl:if>
<TR>
<xsl:for-each select="ps:RowTitlesColumn/ps:Subcolumn">
<td valign="top" nowrap="1">
<xsl:attribute name="width">
<xsl:value-of select="$width"/>
%</xsl:attribute>
<xsl:apply-templates select="ps:d"/>
<xsl:if test="count(ps:d)=0">
<br/>
</xsl:if>
</td>
</xsl:for-each>
<xsl:if test="not($isXAdvancedColumn)">
<xsl:for-each select="ps:XColumn/ps:Subcolumn">
<td valign="top" nowrap="1">
<xsl:attribute name="width">
<xsl:value-of select="$width"/>
%</xsl:attribute>
<xsl:apply-templates select="ps:d"/>
<xsl:if test="count(ps:d)=0">
<br/>
</xsl:if>
</td>
</xsl:for-each>
</xsl:if>
<xsl:if test="$isXAdvancedColumn">
<xsl:for-each select="ps:XAdvancedColumn/ps:Subcolumn">
<td valign="top" nowrap="1">
<xsl:attribute name="width">
<xsl:value-of select="$width"/>
%</xsl:attribute>
<xsl:apply-templates select="ps:d"/>
<xsl:if test="count(ps:d)=0">
<br/>
</xsl:if>
</td>
</xsl:for-each>
</xsl:if>
<xsl:for-each select="ps:YColumn/ps:Subcolumn">
<td valign="top" nowrap="1">
<xsl:attribute name="width">
<xsl:value-of select="$width"/>
%</xsl:attribute>
<xsl:apply-templates select="ps:d"/>
<xsl:if test="count(ps:d)=0">
<br/>
</xsl:if>
</td>
</xsl:for-each>
</TR>
</TABLE>
<br/>
<xsl:apply-templates select="ps:Info"/>
<br/>
<hr/>
<br/>
</xsl:for-each>
</BODY>
</HTML>
</xsl:template>
<!--<xsl:template match="ps:d">
<xsl:choose>
<xsl:when test="@Excluded and string-length(text())" >
<font color="#0000ee">
<xsl:apply-templates select="node()"/>*
</font>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="node()"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position()!=last()"><br/></xsl:if>
</xsl:template>-->
<xsl:template match="ps:d">
<xsl:choose>
<xsl:when test="@Excluded and string-length(text())">
<xsl:choose>
<xsl:when test="../../../@EVFormat='AsteriskAfterNumber'">
<font color="#0000ee">
<xsl:apply-templates select="node()"/>
*
</font>
</xsl:when>
<xsl:when test="../../../@EVFormat='Blank'">
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="node()"/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="node()"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="position()!=last()">
<br/>
</xsl:if>
</xsl:template>
<xsl:template match="ps:Title">
<b>
<xsl:apply-templates select="node()"/>
</b>
</xsl:template>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="ps:Font">
<font>
<xsl:if test="@Size">
<xsl:attribute name="STYLE">
font-size:<xsl:value-of select="@Size"/>
pt</xsl:attribute>
</xsl:if>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()"/>
</font>
</xsl:template>
<xsl:template match="/">
<HTML>
<BODY>
<xsl:apply-templates select="//ps:GraphPadPrismFile"/>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
我在想,也许最直接的方法是解析它并更改我需要更改的数据。但是,如果我需要添加更多表(并且需要这样做),这可能会很棘手。有谁知道我如何使用Matlab的xmlread函数来做到这一点?我也尝试过将其作为结构导入,并使用java转换器,但仍然遇到问题。