powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xsl преобразование
7 сообщений из 7, страница 1 из 1
xsl преобразование
    #38783660
ДмитрийN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть XML, содержащий элементы doc_date, в которых периодически приходит "кривая дата". Данные из doc_date загружаются в колонку типа sql smalldatetime.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<documents>
	<document>
		<content>
			<id>111</id>
			<doc_date>0311-12-20</doc_date>
		</content>
	</document>
	<document>
		<content>
			<id>111</id>
			<doc_date>2013-12-20</doc_date>
		</content>
	</document>
 </documents>


Написал шаблон с пользовательской функцией, которая проверяет входящее значение на smalldatetime и если ОК, то оставляет как есть, а если нет, то возвращает пустое значение.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ex="http://XsltTransformation">
  <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" standalone="no" />
  <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
  </xsl:template>
  <xsl:template match="documents/document/content/doc_date/text()"> 
  		<xsl:value-of select="ex:DateTimeConvert(.)"/>
  </xsl:template>
</xsl:stylesheet>


Текст функции:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function DateTimeConvert(ByVal data As String) As String
        Dim dateValue As Date
        If Date.TryParseExact(data, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, dateValue) Then
            If dateValue > "1900-01-01" And dateValue < "2079-06-06" Then
                Return data
            Else
                Return ""
            End If
        Else
            Return ""
        End If
End Function


В результате преобразования получаем:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<documents>
	<document>
		<content>
			<id>111</id>
			<doc_date />
		</content>
	</document>
	<document>
		<content>
			<id>111</id>
			<doc_date>2013-12-20</doc_date>
		</content>
	</document>
 </documents>


Подскажите, как сделать, чтобы в результате преобразования результат был такой(не выводится элемент doc_date, где была некорретная дата):
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<documents>
	<document>
		<content>
			<id>111</id>
		</content>
	</document>
	<document>
		<content>
			<id>111</id>
			<doc_date>2013-12-20</doc_date>
		</content>
	</document>
 </documents>


Заранее спасибо!
...
Рейтинг: 0 / 0
xsl преобразование
    #38783765
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
2.
3.
4.
5.
6.
<xsl:template match="documents/document/content/doc_date">
    <xsl:variable name="dt" select="ex:DateTimeConvert(.)"/>
    <xsl:if test="$dt!=''">
        <doc_date><xsl:value-of select="$dt"/></doc_date>
    </xsl:if>
</xsl:template>
...
Рейтинг: 0 / 0
xsl преобразование
    #38783795
ДмитрийN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, спасибо!
В результате получается так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<documents>
	<document>
		<content>
			<id>111</id>
		</content>
	</document>
	<document>
		<content>
			<id>111</id>
			<doc_date xmlns:ex="http://XsltTransformation">2013-12-20</doc_date>
		</content>
	</document>
 </documents>


А как сделать, чтобы к doc_date не добавлялся xmlns:ex=" http://XsltTransformation"?
Код: xml
1.
2.
<id>111</id>
<doc_date>2013-12-20</doc_date>
...
Рейтинг: 0 / 0
xsl преобразование
    #38783804
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
<doc_date xmlns:ex="http://XsltTransformation"><xsl:value-of select="$dt"/></doc_date>
...
Рейтинг: 0 / 0
xsl преобразование
    #38783810
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
Код: xml
1.
<xsl:element name="doc_date"><xsl:value-of select="$dt"/><xsl:element>
...
Рейтинг: 0 / 0
xsl преобразование
    #38783818
ДмитрийN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, то, что нужно! спасибо большое!
...
Рейтинг: 0 / 0
xsl преобразование
    #38784188
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДмитрийNА как сделать, чтобы к doc_date не добавлялся xmlns:ex=" http://XsltTransformation"? Атрибут extension-element-prefixes у xsl:stylesheet
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xsl преобразование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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