2012-02-09 114 views
1

从父节点,我需要测试其中一个孩子的值以产生足够的输出。从父代得到孩子的价值

我的XML文件如下:

<Tables> 
    <Table> 
     <Multi_entity>SPECIFIC</Multi_entity> 
     <Table_name>CATEG</Table_name> 
     <Is_temporary>FALSE</Is_temporary> 
     <Tablespace>APSYS_LOCATION_1</Tablespace> 
     <Column> 
     <Column_name>CATEGI</Column_name> 
     <Position>1</Position> 
     <Type>Small</Type> 
     <Size>22</Size> 
     <Null>No</Null> 
     <Default>Yes</Default> 
     <Attribute>Precision=5</Attribute> 
     <Attribute>Scale=0</Attribute> 
     </Column> 
     <Column> 
     <Column_name>CATEGC</Column_name> 
     <Position>2</Position> 
     <Type>LongVarchar</Type> 
     <Size>1</Size> 
     <Null>No</Null> 
     <Default>Yes</Default> 
     <Attribute>Precision=0</Attribute> 
     <Attribute>Scale=0</Attribute> 
     </Column> 
     <Column> 
     <Column_name>CATEG_NAME</Column_name> 
     <Position>3</Position> 
     <Type>Varchar</Type> 
     <Size>23</Size> 
     <Null>No</Null> 
     <Default>Yes</Default> 
     <Attribute>Precision=0</Attribute> 
     <Attribute>Scale=0</Attribute> 
     </Column> 
     <Column> 
     <Column_name>CATEG_TYPE</Column_name> 
     <Position>4</Position> 
     <Type>Small</Type> 
     <Size>22</Size> 
     <Null>No</Null> 
     <Default>Yes</Default> 
     <Attribute>Precision=5</Attribute> 
     <Attribute>Scale=0</Attribute> 
     </Column> 
    </Table> 

从“表”节点,我需要知道,如果“列”之一,有“类型”值“LONGVARCHAR”。

回答

3

是否

<xsl:template match="Table[Column/Type = 'LongVarchar']"> 
    <!-- now transform or output as neeed --> 
</xsl:template> 

帮助?该匹配的任何Table具有ColumnType,该值是LongVarchar

+0

+1为一个很好的答案。 – 2012-02-09 13:09:21

+0

谢谢,但是我们可以有另一个命令,可以用于 SamiBOB 2012-02-09 13:43:59

+0

@SamiBOB:Martin提供的解决方案优于使用'xsl:choose'。它要好得多 - 可维护,可扩展,并且本着XSLT的精神,在单个单一且不可重用的模板中使用模板和模式匹配与显式条件逻辑。 – 2012-02-09 14:26:31

1

我管理的方式,是那么容易,我真的很惊讶它的简单性以及我的问题来:这就是它

<xsl:when test="Column/Type='LongVarchar'"> 

和它完美的作品。 谢谢各位的帮助。

相关问题