2015-10-18 6 views
2

Я пытаюсь реализовать XSL, в котором узел из XML быть выбран только, если этот элемент существует и имеет некоторое значение:Как проверить, если значение элемента равно нулю с помощью XSL: если

Я сделал некоторые исследования и это выражение я нашел может быть использован в условиях испытания:

<xsl:if test="/rootNode/node1" > 

// whatever one wants to do 

</xsl:if> 

будет ли тест на существование ->/RootNode/node1 или только проверить содержимое node1, а? Как мы проверяем содержимое узла1 в этом выражении, что оно не должно быть нулевым.

+0

Что вы подразумеваете под "null"? В XML нет такой вещи. Вы имеете в виду элемент, который присутствует, но не имеет содержания? –

ответ

7

Следующее преобразование должно помочь вам справиться со всеми случаями.

Если содержание node1 является текстом, вы можете использовать text() для его обнаружения. Если контент представляет собой любой элемент, вы можете использовать его для обнаружения его *. Чтобы проверить, является ли он пустым, вы можете добавить условие not(node()). Если вы хотите делать что-либо, если нет node1, добавьте условие not(node1) к корневому узлу.

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/rootNode/node1/text()"> 
has text 
</xsl:template> 
<xsl:template match="/rootNode/node1/*"> 
has elements 
</xsl:template> 
<xsl:template match="/rootNode/node1[not(node())]"> 
is empty 
</xsl:template> 
<xsl:template match="/rootNode[not(node1)]"> 
no node1 
</xsl:template> 
</xsl:stylesheet> 

Вы можете применить то же самое в xsl:if узлах:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/rootNode"> 
     <xsl:if test="node1/text()"> 
     has text 
     </xsl:if> 
     <xsl:if test="node1/*"> 
     has elements 
     </xsl:if> 
     <xsl:if test="node1[not(node())]"> 
     is empty 
     </xsl:if> 
     <xsl:if test="not(node1)"> 
     no node1 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Большое спасибо, однако как мы укажем его в ; Я не хочу создавать правило