Мне нужен XSLT (или что-то - см. Ниже), чтобы заменить символы новой строки во всех атрибутах альтернативным символом.
Мне приходится обрабатывать устаревший XML, который хранит все данные как атрибуты и использует новые строки для выражения количества элементов. Например:
<sample>
<p att="John
Paul
Ringo"></p>
</sample>
Эти новые строки заменяются пробелами, когда я анализирую файл на Java (в соответствии со спецификацией XML), однако я хочу рассматривать их как список, поэтому такое поведение не особенно полезно.
Мое «решение» заключалось в том, чтобы использовать XSLT для замены всех символов новой строки во всех атрибутах каким-либо другим разделителем, но я ничего не знаю о XSLT. Все примеры, которые я видел до сих пор, были либо очень конкретными, либо заменяли содержимое узла вместо значений атрибутов.
Я пробовал replace()
XSLT 2.0, но мне трудно собрать все вместе.
XSLT - это вообще правильное решение? С помощью XSLT ниже:
<xsl:template match="sample/*">
<xsl:for-each select="@*">
<xsl:value-of select="replace(current(), '\n', '|')"/>
</xsl:for-each>
</xsl:template>
примененный к образцу XML, с помощью Saxon выводит следующее:
John Paul Ringo
Очевидно, мне нужен не этот формат - я просто поэкспериментирую с replace()
- но нормализованы ли уже символы новой строки к тому времени, когда мы перейдем к обработке XSLT? Если да, то есть ли другие способы синтаксического анализа этих значений как записи с использованием синтаксического анализатора Java? Пока что я использовал только JAXB.
replace(/data/@value, '\s{2,10}','|')
- это не совсем правильно, потому что предполагается, что вместо новой строки будет более одного пробела, но это может сделать работу. 02.07.2013