Для опции XSLT 2.0 вы можете использовать атрибут separator
в xsl:value-of
.
Это xsl:value-of
:
<xsl:value-of select="/root/item" separator=", "/>
будет выдавать этот вывод:
apple, orange, banana
Вы также можете использовать больше, чем просто запятую для разделителя. Например, это:
<xsl:text>'</xsl:text>
<xsl:value-of select="/root/item" separator="', '"/>
<xsl:text>'</xsl:text>
выдаст следующий вывод:
'apple', 'orange', 'banana'
Другой вариант XSLT 2.0 - string-join()
...
<xsl:value-of select="string-join(/*/item,', ')"/>
Насколько я могу судить, это было сделано только для совместимости с предыдущими выпусками. Это будет полезно только в том случае, если вы раньше не использовали serialVersionUID, а затем внесли изменение, которое, как вы знаете, должно быть совместимым , но которое приводит к сбою сериализации.
См. Спецификацию сериализации Java для получения более подробной информации.
Целью UID версии сериализации является отслеживание различных версий класса для выполнения действительной сериализации объектов.
Идея состоит в том, чтобы сгенерировать идентификатор, уникальный для определенная версия класса, которая затем изменяется, когда в класс добавляются новые детали, такие как новое поле, которое может повлиять на структуру сериализованного объекта.
Всегда используется один и тот же идентификатор, например ] 1L
означает, что в будущем, если определение класса будет изменено, что приведет к изменениям в структуре сериализованного объекта, возникнут проблемы при попытке десериализации объекта.
Если идентификатор равен опущено, Java фактически вычислит идентификатор для вас на основе полей объекта, но я считаю, что это дорогостоящий процесс,поэтому предоставление одного вручную повысит производительность.
Вот пара ссылок на статьи, в которых обсуждается сериализация и управление версиями классов:
Основная причина создания сгенерированного кода - сделать его совместимым с существующая версия класса, в которой уже есть сохраненные копии.
«Длинное» значение по умолчанию для serialVersionUID
- это значение по умолчанию, определенное в Спецификации сериализации Java , рассчитанное на основе поведения сериализации по умолчанию.
Таким образом, если вы добавите номер версии по умолчанию, ваш класс будет (де-) сериализоваться быстрее, пока ничего структурно не изменилось, но вам нужно будет позаботиться о том, чтобы при изменении класса (добавлении / удалении полей) вы также обновите серийный номер.
Если вам не нужно быть совместимым с существующими битовыми потоками, вы можете просто поместить туда 1L
и при необходимости увеличивать версию при каких-либо изменениях. То есть, когда версия сериализации по умолчанию измененного класса будет отличаться от версии по умолчанию старого класса.
Если вы не укажете serialVersionUID, Java сделает его на лету. Сгенерированный serialVersionUID и есть этот номер. Если вы измените что-то в своем классе, что на самом деле не делает ваш класс несовместимым с предыдущими сериализованными версиями, но изменяет хэш, тогда вам нужно использовать сгенерированный serialVersionUID с очень большим числом (или "ожидаемый" номер из сообщения об ошибке) . В противном случае, если вы все отслеживаете самостоятельно, 0, 1, 2 ... лучше.