2011-01-26 5 views
0

У меня есть xml, который может иметь иногда узел DSD_G22, но не всегда. Таким образом, если этот узел присутствует затем получить значение элементов в противном случае присвоить пустым: вход 1 сценарий:Как проверить, присутствует ли узел в файле или нет

<root> 
<G_83> 
<G_8301/> 
<G_8302/> 
</G_83> 
<DSD_G22> 
<DSD_G22_G2201>Value</DSD_G22_G2201> 
<DSD_G22_G2202>Value1</DSD_G22_G2202> 
</DSD_G22> 
</root> 

Сценарий вход 2:

<root> 
<G_83> 
<G_8301/> 
<G_8302/> 
</G_83> 
</root> 

Выход для сценария 2 должно быть:

<G_83> 
<G_8301/> 
<G_8302/> 
</G_83> 
<DSD_G22> 
<DSD_G22_G2201/> 
<DSD_G22_G2202/> 
<DSD_G22/> 
</root> 

Я попытался сделать это, но не работает. Пожалуйста, помогите:

<xsl:variable name="emptySpace" select="' '" /> 
    <xsl:if test="@DSD_G22"> 
      <xsl:if test="@DSD_G22_G2201"> 
      <xsl:attribute name="DSD_G22_G2201"> 
       <xsl:value-of select="@DSD_G22_G2201" /> 
      </xsl:attribute> 
      </xsl:if> 
      <xsl:if test="@DSD_G22_G2202"> 
      <xsl:attribute name="DSD_G22_G2202"> 
       <xsl:value-of select="@DSD_G22_G2202" /> 
      </xsl:attribute> 
      </xsl:if> 
</xsl:if> 
    <xsl:if test="not(@DSD_G22)"> 
      <xsl:attribute name="DSD_G22_G2201"> 
       <xsl:value-of select="@emptySpace " /> 
      </xsl:attribute> 
      <xsl:attribute name="DSD_G22_G2202"> 
       <xsl:value-of select="@emptySpace" /> 
      </xsl:attribute> 
</xls:if> 
+0

Не могли бы вы, пожалуйста, указать, что Шоуда быть выход из сценария 1 (когда элемент настоящее)?. Кроме того, вы предоставили неполный код - неясно, что соответствует шаблону, и к какому элементу должны быть прикреплены сгенерированные атрибуты. Пожалуйста, отредактируйте свой вопрос и предоставите полный (но как можно меньше) пример. –

+0

Возможный дубликат [xpath find, если узел существует] (http://stackoverflow.com/questions/767851/xpath-find-if-node-exists) –

ответ

0

Это будет делать это для вас:

<DSD_G22> 
    <DSD_G22_G2201><xsl:value-of select="DSD_G22/DSD_G22_G2201"/></DSD_G22_G2201> 
    <DSD_G22_G2202><xsl:value-of select="DSD_G22/DSD_G22_G2202"/></DSD_G22_G2202> 
</DSD_G22> 
+0

0 Существует! – user351396

0

<xsl:if test="count(DSD_G22) > 0"> Exists! </xsl:if>

+0

Это сработало для меня – user351396

+0

@ user351396: Функция 'fn: count()' не требуется. –

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