2013-07-09 3 views
0

Входной XML:XSLT - Извлечение и манипулировать часть данных XML

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<Description><![CDATA[Audience: Andrew Reed, Senior Training Specialist, Microsoft Corporation<br/>This session is for individuals who spend significant time writing and creating documents and have some familiarity with Microsoft Word.<br/>Thanks.]]></Description> 
</root> 

XSLT:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"> 
    <xsl:output method="html" indent="yes"/> 
    <xsl:template match="/root"> 
    <div> 
     <xsl:value-of disable-output-escaping="yes" select="Description"/> 
    </div> 
    </xsl:template> 
</xsl:stylesheet> 

Мне нужно добавить еще пару тегов БР после первого появления БР, это после строки Аудитории и перед тем, как начнется другое описание. Можете ли вы изменить мой XSLT, чтобы получить желаемый результат?

Так что я хочу вывода, как показано ниже:

Audience: Andrew Reed, Senior Training Specialist, Microsoft Corporation 


This session is for individuals who spend significant time writing and creating documents and have some familiarity with Microsoft Word. 


Thanks. 
+0

«Мне нужно добавить еще несколько тегов BR» - но выведенный образец не содержит никаких тегов BR. Вы хотите, чтобы вы преобразовали каждый элемент '
' в три возврата каретки? – LarsH

ответ

0

Было бы хорошо, если ваши входные данные были <br/> элементы как фактические элементы, вместо того, чтобы бежать, так что они могут быть выбраны непосредственно с помощью XPath.

Но поскольку они такие, как они есть, вы можете использовать regexp replace, полагаясь на предположение, что они всегда будут соответствовать ограниченному диапазону шаблонов. Вас часто предупреждают не анализировать XML или HTML вообще с использованием регулярных выражений, и это правильно, потому что регулярные выражения не являются общим решением. Но для ограниченного использования их может быть достаточно.

Если я угадал ваши требования правильно, вы могли бы использовать что-то вроде

<xsl:value-of select="replace(Description, '&lt;[Bb][Rr] ?/?>', 
              '&#10;&#10;&#10;')"/> 

Это даст вам пример вывода вы показали, в отличие от добавления еще пару тегов БР после первого появления BR , Он будет допускать некоторые изменения, например. <br> или <BR />.

Предполагается, что вы можете использовать XSLT 2.0, потому что replace() не доступен в версии 1.0. Если вы ограничены 1.0, пожалуйста, дайте мне знать.

+0

Спасибо за ответ, я пробовал это, но он говорит, что функция замены неизвестна, поэтому это XSLT версия 1.0 – 2177

+0

@ 2177: некоторые ответы на http://stackoverflow.com/questions/5280079/xsl-multiple-search-and -replace-function показывает, как выполнить замену строк в XSLT 1.0. – LarsH

Смежные вопросы