Соответствующее выражение внутри раздела данных элемента xml с использованием xsl - PullRequest
0 голосов
/ 15 февраля 2010

Привет, я обычно программирую на c ++, поэтому XML / XSL / XPATH - не моя сильная сторона, но мне нужно выполнить преобразование, и я не могу найти хороший способ сделать это.

У нас есть XML-файл, который отформатирован так:

<outer>
  <element/>
  <other_element/>
  <message pri="info">
    [[!CDATA Error: something is not working]] 
  </message>
  <message pri="info">
    [[!CDATA Warning: warnings are boring]] 
  </message>
</outer>

Мне нужен xsl, который может преобразовать его в точно такой же XML-файл, за исключением того, что он соответствует части «Ошибка:» и изменяет атрибут pri на «ошибка».

Мне нужно сделать это с xsl-преобразователем, и я начал изучать XPATH, но мне трудно понять, как я могу это сделать.

Я дошел до совпадения сообщений с

<xsl:template match="message">
  <xsl:choice>
    <xsl:when test="tricky part">
    </xsl:when>
    <xsl:otherwise>
      <xsl:justcopythetag>
    </xsl:otherwise>
  </xsl:choice>
</xsl:template>

Я узнал, как копировать другие теги сообщений, но не знаю, как сопоставить часть «ошибка».

Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010
...
<xsl:when test="contains(., 'Error')">
    <message pri="error"><xsl:value-of select="."/></message>
</xsl:when>
...otherwise
2 голосов
/ 15 февраля 2010

Вы просто ищете строку "Ошибка:" верно?

<xsl:when test="contains(text(),'Error:')">
</xsl:when>

contains() возвращает true, если первый параметр содержит второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...