2009-10-14 2 views
7

Это мой первый раз, используя XSLT. Я пытаюсь создать файл, который преобразует файл данных XML, экспортированный из программы, которую я использую для отчета HTML.Может ли XSLT разбор строки текста?

Одним из значения элемента является путь к файлу изображения, но путь генерируется абсолютный путь, такой как

C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg 

, но я хочу, относительный путь к только имя файла.

Есть ли какой-нибудь способ через файл XLST для анализа имени файла?

ответ

12

XPath содержит функцию substring-after, которая возвращает строку, следующую за , сначала появление другой строки. Это не достаточно само по себе, но шаблон, такие как следующие, возможно, сделать это:

<xsl:template name="filename-only"> 
    <xsl:param name="path" /> 
    <xsl:choose> 
     <xsl:when test="contains($path, '\')"> 
      <xsl:call-template name="filename-only"> 
       <xsl:with-param name="path" select="substring-after($path, '\')" /> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$path" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

Набор строковых функций доступны не очень обширна, но я обнаружил, что он достаточно хорош для большинства применений что вам понадобится в XSLT.

0

XSLT с помощью XPath 2.0 и его различных string functions помогает справиться с такими вещами.

Пример:
Предполагая, что путь [к JPG-файла], упомянутый в вопросе исходит из XML-фрагмент похож на

... 
<For_HTML> 
    <Image1> 
     <Path>C:\Documents and Settings\me\Desktop\xml export\cd000402.jpg</Path> 
     <Description>Photo of the parking lot</Description> 
     <Width>123</Width> 
     ... 
    </Image1> 
</For_HTML> 

XSLT сниппет будет выглядеть как

<xsl:template match='//For_HTML/Image1'> 
    <img src='http://myNewServer.com/ImageBin/{substring-after(./Path,"\xml export\")}' 
      alt='{./Description}' 
      width=' .... you got the idea' 
    /> 
</xsl:template> 

Примечание: А не было» у меня есть время для тестирования; но это выглядит правильно.

+0

Вы не можете помещать теги XSLT в атрибуты файла шаблона. Вместо этого используйте '{...}'. –

+0

@Greg Человек, ты хороший! Держать нас всех честными ;-) и часто учили нас. Спасибо. Исправлено и протестировано! – mjv

2

Это немного выходит за рамки вопроса, но Michael Kay has an excellent paper об использовании XSLT 2 для синтаксического анализа чистого текста в XML.

0

Это возможно. Я разработал следующий сценарий: http://barsand.wordpress.com/2012/06/19/can-an-xslt-parse-a-string-of-text/

+1

Можете ли вы дать несколько подробностей о вашем скрипте? Ссылка только ответы, как правило, не полезны, так как некоторые ссылки умирают через некоторое время. – Bernhard

+0

Просьба уточнить ваш ответ – Stephan

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