powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT, прервать for-each
2 сообщений из 2, страница 1 из 1
XSLT, прервать for-each
    #35657554
Duster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два докуменнта с одинаковыми схемами. Предположим, что они выглядят так:
1 документ:
Код: plaintext
1.
2.
3.
4.
<A>
  <B name="b1" attr1="one" attr2="two"/>
  <B name="b2" attr1="three" attr2="four"/>
</A>

2 документ:
Код: plaintext
1.
2.
3.
4.
<A>
   <B name="b1" attr1="one" attr2="two"/>
   <B name="b2" attr1="blah" attr2="blah"/>
</A>

Требуется сравнить элементы в обоих документах, найти те, у которых совпадают name и сравнить их аттрибуты. Если аттрибуты не поменялись - ничего не делать, если же хотя бы один аттрибут изменился - сделать что-то.

Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<xsl:template name="modified">
	<xsl:for-each select="//B">
		<xsl:variable name="cur_col" select="."/>
		<xsl:if test="@name = $doc2/B/@name">
			<xsl:for-each select="./@*">
				<xsl:if test="not(. = $old/@*)">
                                    <MyOption>
					<xsl:attribute name="name"><xsl:value-of select="$cur_col/@name"/></xsl:attribute>
					<xsl:attribute name="event"><xsl:text>modified</xsl:text></xsl:attribute>
			 	     </MyOption>
				</xsl:if>
			</xsl:for-each>
		</xsl:if>
	</xsl:for-each>
</xsl:template> 

Естественно для примера, приведенного выше, получаю две одинаковые записи с одним name (b2), т.к. у них различаются 2 аттрибута.
А надо бы формировать элемент 1 раз, если есть 1 или более несовпадающих аттрибутов.
Как это сделать? Ведь for-each прервать, как я понял, нельзя.
...
Рейтинг: 0 / 0
XSLT, прервать for-each
    #35657564
Duster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поправка:
вместо
Код: plaintext
<xsl:if test="not(. = $old/@*)">
читать
Код: plaintext
<xsl:if test="not(. = $doc2/B/@*)">
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XSLT, прервать for-each
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]