2015-07-22 11 views
1

XML:XSL: если тест или XSL: выбрать

<?xml version="1.0" encoding="utf-8"?> 
<NewDataSet> 
    <inc_incident> 
    <inc_interventionprocedure> 
     <ProcedureID>CPR</ProcedureID> 
    </inc_interventionprocedure> 
    <inc_interventionprocedure> 
     <ProcedureID>Airway-Endotracheal Intubation</ProcedureID> 
    </inc_interventionprocedure> 
    <inc_interventionprocedure> 
     <ProcedureID>Capnography</ProcedureID> 
    </inc_interventionprocedure> 
    </inc_incident> 
</NewDataSet> 

XSL:

<xsl:if test="starts-with(inc_interventionprocedure/ProcedureID, "Airway")"> 
<fo:inline>X</fo:inline> 
</xsl:if> 
<xsl:if test="not(starts-with(inc_interventionprocedure/ProcedureID, "Airway"))"> 
    <fo:inline>X</fo:inline> 
</xsl:if> 

Я хотел бы показать, если какой-либо из узлов начинается с "авиалинию", в колонке " YES "с символом" X ", и если в столбце" NO "нет знака" X "нет ни одного. С этим xsl: if test оба столбца отмечены символом Xs.

Результат с XSL: если тест показывает:

    YES NO 

Эруэй Основана X X

+0

Пожалуйста, разместите воспроизводимый пример - один, который мы можем протестировать, скопировав и вставив отдельно. Глядя на ваш XML невооруженным глазом, есть несколько узлов inc_interventionprocedure/ProcedureID - некоторые отвечают первому тесту, некоторые соответствуют другому. Кроме того, фрагмент XSLT, который вы показываете нам, недействителен (двойные кавычки внутри двойных кавычек). –

ответ

0

Решение, предоставленное Tim C, должно работать с незначительными изменениями, как показано ниже.

<xsl:choose> 
    <xsl:when test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]"> 
     <fo:inline>X</fo:inline> 
     <fo:inline>&nbsp;</fo:inline> 
    </xsl:when> 
    <xsl:otherwise> 
     <fo:inline>&nbsp;</fo:inline> 
     <fo:inline>X</fo:inline> 
    </xsl:otherwise> 
</xsl:choose> 
+0

Это работало как шарм. Удивительно, как небольшое изменение может изменить ситуацию. Спасибо :-) – user2726752

0

Ваш текущий тест не очень хорошо сформированы, как у вас есть кавычки внедренные в кавычки. Но основная проблема заключается в том, что starts-with берет строку как первый параметр, а не набор узлов. В XSLT 1.0 он будет использовать значение первого узла. В XSLT 2.0 вы получите сообщение об ошибке.

Ваше выражение должно действительно выглядеть следующим образом

<xsl:if test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]"> 

В идеале, вы должны использовать xsl:choose здесь, чтобы не писать все выражение снова внутри not

Попробуйте это:

<xsl:choose> 
     <xsl:when test="inc_interventionprocedure/ProcedureID[starts-with(., 'Airway')]"> 
      <fo:inline>YES</fo:inline> 
     </xsl:when> 
     <xsl:otherwise> 
      <fo:inline>NO</fo:inline> 
     </xsl:otherwise> 
    </xsl:choose> 

Предполагается, что вы находитесь на элементе inc_incident.

+0

«* Но главная проблема - это ... *« Это не ** ** не приведет к заявленному результату. –

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