#xml #xslt #xslt-2.0
#xml #xslt #xslt-2.0
Вопрос:
У меня есть некоторый написанный код и XML, как указано здесь:
<section label="docs">
<presentation>
<mini-site title="Documents"/>
<power-page title="Product Documents"/>
</presentation>
<content template="document-gallery">
<document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Springfield/TIMSEB471MRR1en.pdf" title="Complete Owner's Guide"/>
<document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Springfield/5995709499.pdf" title="Wiring Diagram"/>
<document lanuage="en, es, fr" ref="http://manuals.frigidaire.com/prodinfo_pdf/Springfield/TINSEB472MRR0.pdf" title="Installation Instructions"/>
<document lanuage="en" ref="http://manuals.frigidaire.com/prodinfo_pdf/Specsheets/E30MO65GSS_1213_EN.pdf" title="Product Specifications Sheet"/>
</content>
</section>
В URL «ref» он заканчивается на «en.pdf» и language=»en».
Я хочу выбрать те PDF, у которых есть lanuage =»en», а ссылка заканчивается на «en.pdf».
Вот что я написал:
<xsl:template match="document">
<xsl:if test="select[(@lanuage,'en') and ends-with(@ref,'en.pdf')]">
<xsl:variable name="href" select="js:call($resource-to-collect,string(@ref))"/>
<a type="{name()}" href="{$href}"><xsl:apply-templates select="@* except(@ref)"/><xsl:apply-templates select="node()"/></a>
</xsl:if>
</xsl:template>
Но это дает мне вывод, который имеет lanuage = «en», пожалуйста, предложите мне это.
Комментарии:
1. Это выдаст точное, в соответствии с условием, которое вы ищете, значение @language равно ‘en’
2. не могли бы вы, пожалуйста, сообщить мне, как я могу удовлетворить оба условия
3. Вы уверены, что ваш текущий XSLT выводит что-нибудь? Выражение
select[(@lanuage,'en') and ends-with(@ref,'en.pdf')]
ищет вызываемый дочерний узелselect
, которого не существует в вашем XML, и поэтому условие всегда будет false. В этом примере я ожидал бы, что это будет<xsl:if test="@language = 'en' and ends-with(@ref, 'en.pdf')">
4. Если, если он не содержит
lanuage
атрибута, тогда вам нужно использовать «или»не «и»здесь.<xsl:if test="@lanuage='en' or ends-with(@ref,'en.pdf')">
. Или, может быть<xsl:if test="contains(@lanuage, 'en') or ends-with(@ref,'en.pdf')">
, если вы хотите включить тот, сlanuage="en, es, fr"
5. Обратите также внимание, что XML чувствителен к регистру:
E30MO65GSS_1213_EN.pdf
не заканчивается наen.pdf
.
Ответ №1:
Привет, Бриджеш, попробуй этот код:
<xsl:template match="document">
<xsl:if test="(@lanuage[.]='en') and (ends-with(lower-case(@ref[.]),'en.pdf'))">
<document>
<xsl:attribute name="language" select="./@language"/>
<xsl:attribute name="ref" select="./@ref"/>
</document>
</xsl:if>
</xsl:template>
Комментарии:
1. Я думаю, что этот ответ не охватывает все комментарии о нижнем / верхнем регистре и элементе в последовательности
2. Как насчет
eN.pdf
илиEn.PDF
?