民间: 请原谅这个新手问题,但请帮助我 -
我正在使用XSL来操作XML中的一些值,如下所示 -
<userFields>
<userField>
<FieldName>TEST1</FieldName>
<FieldVal>123</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST2</FieldName>
<FieldVal>999</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST3</FieldName>
<FieldVal>756</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST4</FieldName>
<FieldVal>1234</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
...
</userFields>
我需要为特定的“FieldName”获取FieldVal,比如我需要FieldName为FieldName“TEST2”(在这种情况下为999),我该如何做到这一点呢? Intent是将值存储在变量中,并将其作为XML中的单独用户字段添加,因此结果如下所示:
<userFields>
<userField>
<FieldName>TEST1</FieldName>
<FieldVal>123</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST2</FieldName>
<FieldVal>999</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST3</FieldName>
<FieldVal>756</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
<userField>
<FieldName>TEST4</FieldName>
<FieldVal>1234</FieldVal>
<Fieldtype>char</Fieldtype>
</userField>
...
</userFields>
<variableX>999</variableX>
我想将TEST2的Fieldval存储在XML中的variableX中。这是因为我可以将此变量作为后续db fetch的参数传递。谢谢。
答案 0 :(得分:1)
你正在寻找的表达是......
<xsl:variable name="field" select="//userField[FieldName='TEST2']/FieldVal" />
或者,定义一个键来查找元素..
<xsl:key name="userFields" match="userField" use="FieldName" />
然后你可以像这样查找......
<xsl:variable name="field" select="key('userFields', 'TEST2')/FieldVal" />
试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="userFields" match="userField" use="FieldName" />
<xsl:param name="fieldName" select="'TEST4'" />
<xsl:variable name="field" select="key('userFields', $fieldName)/FieldVal" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="userFields">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
<variableX>
<xsl:value-of select="$field" />
</variableX>
</xsl:template>
</xsl:stylesheet>
注意我已经制作了&#34; TEST2&#34;一个参数,所以它可以由主应用程序传入。
另请注意使用Identity Template复制现有值。