XSL в HTML: проблемы с методом содержимого - PullRequest
0 голосов
/ 25 сентября 2019

У меня действительно странная ситуация.В моем случае содержит работает с одним значением и не работает с другим.Я пробовал отладку для XSLT (здесь не очень помогает).

Ситуация следующая.У меня есть следующая структура XML:

<RejRow>
 <Column>
    <ColumnName>GRP</ColumnName>
    <ColumnValue>1234w5</ColumnValue>
    <ValidationType>GRP: Non-Integer Value</ValidationType>
  </Column>
  <ColumnName>TCL</ColumnName>
    <ColumnValue>lklk3343//</ColumnValue>
    <ValidationType>TCL: Non-Alphanumeric Value</ValidationType>
  </Column>
 </RejRow>

И у меня есть два для каждого вызова, для одного он работает, для другого - нет ... Пытался разобраться во всеми до сих пор понятия не имею, почему это не работает для меня.Если работает для не алфавитно-цифровых.

Этот не работает:

<xsl:for-each select="RejRow[contains(Column/ValidationType, 'Non-Integer Value')]">
<tr>
    <td>test1</td> 
</tr>
</xsl:for-each>

И этот делает:

<xsl:for-each select="RejRow[contains(Column/ValidationType, 'Non-Alphanumeric Value')]">
<tr>
    <td>test1</td> 
</tr>
</xsl:for-each>

Интересно, если я явно укажу всю проверкуимя, для каждого работает:

<xsl:for-each select="RejRow[Column/ValidationType='GRP: Non-Integer Value')]">
<tr>
    <td>test1</td> 
</tr>
</xsl:for-each>

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Вам нужно использовать RejRow[Column[contains(ValidationType, 'Non-Integer Value')]] или RejRow[Column/ValidationType[contains(., 'Non-Integer Value')]] вместо RejRow[contains(Column/ValidationType, 'Non-Integer Value')].Поскольку у вас есть несколько Column элементов, ваш contains в XSLT 1 будет использовать первый Column, в то время как в XSLT 2 или 3 вы получите ошибку.

0 голосов
/ 25 сентября 2019

Когда вы делаете contains(NN, value), а NN - это набор узлов, содержащий более одного узла, то (a) в XPath 1.0 все узлы в NN, кроме первого, игнорируются, и (b) в XPath 2.0 этовыдает ошибку.Column/ValidationType - это набор узлов, содержащий 2 узла, поэтому он выглядит так, как будто вы используете XPath / XSLT 1.0.Он был изменен в 2.0, потому что в эту ловушку попало очень много людей: еще одна причина двигаться вперед (или убедить вашего поставщика программного обеспечения сделать это).

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