2016-12-18 10 views
0

У меня есть XMLКак пропустить некоторые элементы XSLT, если какой-либо элемент XML не существует в определении?

<?xml version="1.0"?> 
<data> 
<element> 
<A>192.168.188.100</A> 
<B>/shelf=1</B> 
<C></C> 
</element> 
<element> 
<A>192.168.188.100</A> 
<B>/slot=1</B> 
</element> 
<element> 
<A>192.168.188.23</A> 
<B>/port=client:1:3:1-2</B> 
</element> 
</data> 

У меня есть отображение XSLT, которая работает:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:max="http://www.ibm.com/maximo"> 

<xsl:output method="xml" encoding="UTF-8" indent="yes"/> 
<xsl:template match="/"> 
    <max:SyncCIDW> 
    <max:CIDWSet> 
    <xsl:apply-templates select="data/element" /> 
    </max:CIDWSet> 
    </max:SyncCIDW> 
</xsl:template> 

    <xsl:template match="element"> 
    <max:CI> 
     <max:CINUM><xsl:value-of select="A"/></max:CINUM> 
    </max:CI> 
    </xsl:template> 

</xsl:stylesheet> 

Но теперь я хочу, чтобы обрабатывать только те элементы, которые имеют элемент C в определении. Таким образом, элемент C может иметь значение или нет, но должен быть обработан только ELEMENT, который имеет C?

Итак, в основном мой вывод для этого примера должен иметь только 1 элемент в результате.

Благодаря

ответ

2

Изменение <xsl:apply-templates select="data/element" /> в <xsl:apply-templates select="data/element[C]" />.

+0

Привет, Мартин, извините, если у меня может возникнуть еще один вопрос: что, если кроме элемента C я должен иметь и некоторый элемент D для обработки этого XML?, Поэтому он означает, что должны выполняться несколько условий, чтобы иметь как C, так и D ? – Dejan

+0

возможно ли это в этом случае - data/element [C] [D] или что такое правильный синтаксис? – Dejan

+0

'data/element [C] [D]' проверяет, что 'element' имеет как (хотя бы один) элемент' C' и 'D'. Вы также можете написать 'data/element [C и D]', если хотите. –