2015-01-12 2 views
1

Я хочу проверить появление определенного текста. Ниже мой XSLT:Проверить возникновение XSLT

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" 
encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 

<!-- Notify PANTONE - If YES --> 
<xsl:if test="contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE')"> 
<PantonePage><note>Yes</note></PantonePage> 
</xsl:if> 

<!-- Notify PANTONE - If NO --> 
<xsl:if test="not(contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE'))"> 
<PantonePage><note>No</note></PantonePage> 
</xsl:if> 

</xsl:template> 
</xsl:stylesheet> 

Мой выход желание должно быть:

<pantone>Yes</pantone> 

или

<pantone>No</pantone> 

В исходном XML, PANTONE может быть PANTONE Красный U, PANTONE Зеленый U. При тестировании вышеуказанного XSLT ответ всегда равен NO.

Ниже мой XML:

<?xml version="1.0" encoding="UTF-8"?> 
<xmlreport> 
    <PageInfo> 
    <PageAttribute> 
     <PageNum>1</PageNum> 
     <TrimSize> 
     <H>220 mm</H> 
     <W>150 mm</W> 
     </TrimSize> 
     <MediaSize> 
     <H>225 mm</H> 
     <W>160 mm</W> 
     </MediaSize> 
     <PageColor>PANTONE Red U</PageColor> 
    </PageAttribute> 
    <PageAttribute> 
     <PageNum>2</PageNum> 
     <TrimSize> 
     <H>220 mm</H> 
     <W>150 mm</W> 
     </TrimSize> 
     <MediaSize> 
     <H>225 mm</H> 
     <W>160 mm</W> 
     </MediaSize> 
     <PageColor>Black</PageColor> 
    </PageAttribute> 
    <PageAttribute> 
     <PageNum>3</PageNum> 
     <TrimSize> 
     <H>220 mm</H> 
     <W>150 mm</W> 
     </TrimSize> 
     <MediaSize> 
     <H>225 mm</H> 
     <W>160 mm</W> 
     </MediaSize> 
     <PageColor>Cyan Magenta Yellow Black</PageColor> 
    </PageAttribute> 
    <PageInfo> 
<xmlreport> 

PageAttribute будет повторяться в зависимости от количества страниц.

+0

Вы можете оставить XML, пожалуйста, для соответствующего XPATH ? Он работает для меня с моим предполагаемым исходным XML, поэтому, возможно, есть атрибут или что-то, что мне не хватает. –

+0

Привет @JasonW Я обновил свой XML. – smudgees

+0

"* Параметр PageAttribute будет повторяться в зависимости от количества страниц. *« Очень плохо, что ваш пример не отражает этого, потому что это корень проблемы здесь. –

ответ

0

Edited таблицы стилей на основе при условии выборки XML

Я изменил подход Теперь, зная, бизнес-правила более четко, что вы ожидаете многостраничные атрибуты внутри страницы информационного элемента. Ответ Майкла определенно объясняет, что одно значение возвращается, если какая-либо из страниц является pantone и является полностью правильной. Разница в нижеприведенном подходе заключается в том, что она предоставляет структуру для определения, какая из страниц Pantone в случае, если другие, которые наткнулись на эти ответы, ищут это бизнес-правило по странице.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
    <xsl:template match="/"> 
     <results> 
      <xsl:apply-templates /> 
     </results> 
    </xsl:template> 
    <xsl:template match="xmlreport/PageInfo/PageAttribute"> 
     <Page> 
      <PageNum><xsl:number/></PageNum> 
      <Pantone> 
       <xsl:choose> 
        <xsl:when test="contains(PageColor,'PANTONE')">Yes</xsl:when> 
        <xsl:otherwise>No</xsl:otherwise> 
       </xsl:choose> 
      </Pantone> 
     </Page> 
    </xsl:template> 
</xsl:stylesheet> 

Запуск этого против вашей предоставленной урожайности XML выборок:

<results> 
    <Page> 
     <PageNum>1</PageNum> 
     <Pantone>Yes</Pantone> 
    </Page> 
    <Page> 
     <PageNum>2</PageNum> 
     <Pantone>No</Pantone> 
    </Page> 
    <Page> 
     <PageNum>3</PageNum> 
     <Pantone>No</Pantone> 
    </Page> 
</results> 
2

причиной, почему ваша попытка не работает, что является строки функции и выражение:

contains(xmlreport/PageInfo/PageAttribute/PageColor,'PANTONE')" 

проверяет только строковое значение первый узел набора.

Попробуйте вместо этого:

<xsl:template match="/"> 
    <PantonePage> 
     <note> 
      <xsl:choose> 
       <xsl:when test="xmlreport/PageInfo/PageAttribute[contains(PageColor, 'PANTONE')]">Yes</xsl:when> 
       <xsl:otherwise>No</xsl:otherwise> 
      </xsl:choose> 
     </note> 
    </PantonePage> 
</xsl:template> 

Или - если вы можете принять результат истина/ложь вместо Да/Нет - просто:

<xsl:template match="/"> 
    <PantonePage> 
     <note> 
      <xsl:value-of select="boolean(xmlreport/PageInfo/PageAttribute[contains(PageColor, 'PANTONE')])"/> 
     </note> 
    </PantonePage> 
</xsl:template> 
+0

@smudgees http://stackoverflow.com/help/someone-answers –

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