parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Попробуй так:

mashi 15.11.2005 02:47 / 15.11.2005 02:55

Вот метод, который не претендует на оптимальность, но работает.
#############################################################
@main[]
^method[/test/file1.xml;/test/file2.xml]

#############################################################
@method[donor_file;acceptor_file][donor;acceptor]
# загружаем донора и переводим в формат таб-делимитед
$donor[^xdoc::load[$donor_file]]
$donor[^donor.transform[/test/transform.xsl]]
^donor.save[donor_tab.cfg;
    $.method[text] 
    $.indent[no]
    $.omit-xml-declaration[yes]
]
$donor[]

# загружаем акцептора и переводим в формат таб-делимитед
$acceptor[^xdoc::load[$acceptor_file]]
$acceptor[^acceptor.transform[/test/transform.xsl]]
^acceptor.save[acceptor_tab.cfg;
    $.method[text] 
    $.indent[no]
    $.omit-xml-declaration[yes]
]
$acceptor[]

# загружаем донора и акцептора в соответствующие таблицы...
$donor[^table::load[donor_tab.cfg]]
$acceptor[^table::load[acceptor_tab.cfg]]
# ...и переводим их в хеши
$donor[^donor.hash[link]]
$acceptor[^acceptor.hash[link]]


<table border="1">
^donor.foreach[link;atribs]{
<tr>
	<td>$link</td>
	^if(!def $acceptor.[$link]){
		<td style="color:red">этого файла нет в акцепторе</td>
	}{
		^if($atribs.date == $acceptor.[$link].date && $atribs.size == $acceptor.[$link].size){<td>файл остался без изменений</td>}{<td style="color:red">есть изменения!</td>}
	}

</tr>
}
</table>
#############################################################
Файл 'transform.xsl':
_____________________________________________________________
<?xml version="1.0" encoding="WINDOWS-1251"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

	<xsl:template match="/parcms/files">
date<xsl:text>	</xsl:text>link<xsl:text>	</xsl:text>size<xsl:text>	</xsl:text>name<xsl:text>
</xsl:text>
		<xsl:for-each select="file">
			<xsl:apply-templates select="." />
		</xsl:for-each>
	</xsl:template>

	<xsl:template match="files/file">
<xsl:value-of select="@date" /><xsl:text>	</xsl:text><xsl:value-of select="@link" /><xsl:text>	</xsl:text><xsl:value-of select="@size" /><xsl:text>	</xsl:text><xsl:value-of select="." /><xsl:text>
</xsl:text>
	</xsl:template>
	<xsl:template match="text()" />	
	
</xsl:stylesheet>
_____________________________________________________________



file1.xml (донор)
_____________________________________________________________
<?xml version="1.0" encoding="WINDOWS-1251"?>
<parcms>
	<title>ParCMS: Content management System</title>
	<files>
		<file date="1131701691" link="/admin/admin.css" size="303">admin.css</file>
		<file date="1131701691" link="/admin/auto.p" size="1905">auto.p</file>
		<file date="1131701691" link="/admin/catalog/base/index.html" size="13264">index.html</file>
		<file date="1131701691" link="/admin/catalog/base/tableadded.tbl" size="589">tableadded.tbl</file>
		<file date="1131701691" link="/admin/catalog/base/tablelost.tbl" size="93">tablelost.tbl</file>
	</files>
</parcms>
_____________________________________________________________



file2.xml (акцептор)
_____________________________________________________________
<?xml version="1.0" encoding="WINDOWS-1251"?>
<parcms>
	<title>ParCMS: Content management System</title>
	<files>
		<file date="1131701691" link="/admin/admin.css" size="286">admin.css</file>
		<file date="1131701691" link="/admin/auto.p" size="1905">auto.p</file>
		<file date="1131701691" link="/admin/catalog/base/index.html" size="13264">index.html</file>
		<file date="1131701691" link="/admin/catalog/base/tableadded.tbl" size="589">tableadded.tbl</file>
	</files>
</parcms>
_____________________________________________________________

Проверял. Работает.
При условии, что атрибут link уникальный в пределах xml-файла.