Xquery根据元素类型将文本附加到标记值

时间:2012-09-03 03:58:22

标签: xml xquery

我需要获取某些元素的值,然后根据元素添加一些文本,例如:

<elementType>a</elementType> 
<otherElementType>b</otherElementType> 
<elementType>c</elementType> 
<elementType>d</elementType>

$doc//*[self::elementType or self::otherElementType]/string()

"a"
"b"
"c"
"d"

这会返回值,但我不知道如何获取这样的值:

"a is an elementType"
"b is an otherElementType"
"c is an elementType"
"d is an elementType"

2 个答案:

答案 0 :(得分:0)

使用

//*[self::elementType or self::otherElementType]
              /concat(., ' is a ', name(), '&#xA;')

根据以下XML文档评估此表达式(提供的格式错误的片段 - 已更正):

<t>
    <elementType>a</elementType>
    <otherElementType>b</otherElementType>
    <elementType>c</elementType>
    <elementType>d</elementType>
</t>

产生了想要的正确结果

a is a elementType
 b is a otherElementType
 c is a elementType
 d is a elementType

答案 1 :(得分:0)

您可能希望通过基于规则的处理来查看XSLT,这似乎与您考虑需求的方式相符:

使用

<xsl:apply-templates select="*"/>

处理所有元素,然后分离模板规则以说明如何处理每种元素:

<xsl:template match="elementType">
  do one thing
</xsl:template>

<xsl:template match="otherElementType">
  do a different thing
</xsl:template>