2013-07-23 3 views
1

У меня проблема с XSLT replace().xslt найти и заменить regex-lookarounds

XML:

<root> 
<title>I am title</title> 
<body> 
the new formula is:<br/> 
the speed test 234 km/h<br> 
the weight is 49 kg<br/> 
in the 1492 Lorenzo de Medici die. 
etc. 
<dida>the mass is 56 kn</dida> 
</body> 
</root> 

Я должен заменить все пространство после числа системы измерения.

В PHP я нашел это регулярное выражение:

((?<=\d)\s(?=km|kg|kn)) 

В XSLT у меня есть:

<xsl:template match="//*/text()"> 
<xsl:value-of select="replace(., '\(\(?\<=\\d\)\\s\(?=km\|kg\|kn\)\)', '&nbsp;')"></xsl:variable> 
</xsl:template> 

Проблема заключается в том < характер!

+0

Как правило, синтаксис регулярного выражения XPath является подмножеством того, что позволяют PHP и Perl, и вы не должны предполагать, что вы можете просто повторно использовать регулярное выражение PHP таким образом. Обычно есть другой способ добиться того, чего вы хотите, часто проще. –

ответ

1

Общее обозначение '<' внутри символьной строки является &lt;

Это, однако, не исправить это для моего процессора XSLT (Kernow, используя Saxon 9.1.0.3). Как оказалось, для скобок и вертикальных баров им не нужны все эти экраны. Кроме того, поиск не работал. Я смог это решить, используя

<xsl:value-of select="replace(., '(\d)\s(km|kg|kn)', '$1!$2')"></xsl:value-of> 

(для ясности заменяется на '!').

В вашем примере есть несколько других ошибок, которые я должен был исправить первым: <br> был неправильно закрыт, и вы не должны заканчивать <xsl:value-of .. с помощью </xsl:variable>.

+0

Большое спасибо !!! Xml - это только пример, а в копировании и вставке из xslt я делаю ошибку – steguozzo