У меня проблема с реализацией следующих функций:
(i) Мне нужно проверить тег в xml.Если он существует и не является пустым, я должен получить его значение, иначе значение по умолчанию.Я пишу xslt, как показано ниже:
<xsl:if test="relation">
<xsl:choose>
<xsl:when test="boolean(relation/termId) and string(relation/termId) != ''">
<xsl:value-of select="relation/termId" />
</xsl:when>
<xsl:otherwise>
<xsl:text>DefaultTermId</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
Итак, отношение / termId существует и имеет некоторое значение (скажем, <termId>x</termId>
, я должен получить x). Xpath и все в порядке.Он отлично работает, когда тег termId не существует (=> Я получаю DefaultTermId), но возвращает пустой пробел, когда тег не имеет значения.Я имею в виду, когда is <termId></termId>
, вместо «DefaultTermId» я получаю пустое место.я тоже попробовал relation/termId/text() != ''
, но безрезультатно.
(ii) Другая проблема => Мой xml выглядит следующим образом:
<GetSavedReportResponse xmlns="">
<ResponseType>Success</ResponseType>
<FileModifiedDateTime>2012-01-03T17:05:04</FileModifiedDateTime>
<FileSizeBytes>7816</FileSizeBytes>
<FileDataFormat>XML</FileDataFormat>
<FileData>
<Zthes>
<term>
<termId>49555</termId>
<termUpdate>add</termUpdate>
<termName>Active Personnel</termName>
<termVocabulary>People Status Global</termVocabulary>
<termVocabulary>Employee Status Global</termVocabulary>
<termCategory>PDA</termCategory>
<termCategory>PDI</termCategory>
<termCategory>GLB</termCategory>
<relation weight="100">
<termId>49556</termId>
<relationType>EQ</relationType>
<termName>term name</termName>
<termVocabulary>term vocabulary</termVocabulary>
</relation>
<relation weight="100">
<termId>49556</termId>
<relationType>BT</relationType>
<termName>General Active Personnel</termName>
<termVocabulary>People Status Global Updated</termVocabulary>
</relation>
</term>
<term>
<termId>49554</termId>
<termUpdate>add</termUpdate>
<termName>General Active Personnel</termName>
<termVocabulary>People Status Global</termVocabulary>
<termCategory>PDI</termCategory>
</term>
</Zthes>
</FileData>
</GetSavedReportResponse>
здесь может быть несколько тегов termCategoryна срок.Мне нужно проверить, содержит ли какой-либо из этих узлов указанную подстроку, если да, мне нужно извлечь весь термин узел.Я попытался, как показано ниже:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:if test="termCategory">
<xsl:if test="substring(FileData/Zthes/term/termCategory, 1, 2) = 'GL'">
<xsl:copy>
<xsl:apply-templates select="term"/>
</xsl:copy>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Но это не работает нормально.Здесь вывод должен быть:
<GetSavedReportResponse xmlns="">
<ResponseType>Success</ResponseType>
<FileModifiedDateTime>2012-01-03T17:05:04</FileModifiedDateTime>
<FileSizeBytes>7816</FileSizeBytes>
<FileDataFormat>XML</FileDataFormat>
<FileData>
<Zthes>
<term>
<termId>49555</termId>
<termUpdate>add</termUpdate>
<termName>Active Personnel</termName>
<termVocabulary>People Status Global</termVocabulary>
<termVocabulary>Employee Status Global</termVocabulary>
<termCategory>PDA</termCategory>
<termCategory>PDI</termCategory>
<termCategory>GLB</termCategory>
<relation weight="100">
<relationType>EQ</relationType>
<termName>term name</termName>
<termVocabulary>term vocabulary</termVocabulary>
</relation>
<relation weight="100">
<relationType>BT</relationType>
<termName>General Active Personnel</termName>
<termVocabulary>People Status Global Updated</termVocabulary>
</relation>
</term>
<term>
</Zthes>
</FileData>
</GetSavedReportResponse>
ps: Положение подстроки не фиксировано, поэтому я не могу использовать старты с и т. Д.Я должен использовать SubString.Таким образом, в приведенном выше примере, например: третий термин категории первого термина содержит «GL», следовательно, он должен быть восстановлен.Второе слагаемое имеет одну termCategory, но не содержит «GL», следовательно, его не следует извлекать.Пожалуйста, помогите мне, где я делаю неправильно.Заранее спасибо.
С уважением