XPath帮助。获取具有变量名称的childnode

时间:2010-06-10 13:42:27

标签: xml xpath

我有以下XML:

<StatsContainer>
    <Variant1>0</Variant1>
    <Variant2>0.5</Variant2>
    <Variant3>1.2</Variant3>
    <Variant4>4.1</Variant4>
    <Variant5>93.9</Variant5>
    <Variant6>0.3</Variant6>
    <Variant7>0</Variant7>
    <Variant8>0</Variant8>
    <Variant9>0</Variant9>
    <Variant10>0</Variant10>
    <Variant11>0</Variant11>
    <Variant12>0</Variant12>
    <GlobalVariant1>4.6</GlobalVariant1>
    <GlobalVariant2>40.4</GlobalVariant2>
    <GlobalVariant3>13.8</GlobalVariant3>
    <GlobalVariant4>2.8</GlobalVariant4>
    <GlobalVariant5>35.6</GlobalVariant5>
    <GlobalVariant6>2.8</GlobalVariant6>
    <GlobalVariant7>0</GlobalVariant7>
    <GlobalVariant8>0</GlobalVariant8>
    <GlobalVariant9>0</GlobalVariant9>
    <GlobalVariant10>0</GlobalVariant10>
    <GlobalVariant11>0</GlobalVariant11>
    <GlobalVariant12>0</GlobalVariant12>
    <MosaicType>Boligtype</MosaicType>
    <OverRepresentedVariant>5</OverRepresentedVariant>
</StatsContainer>

如您所见,我在“OverRepresentedVariant”标签中有一个数字。这个数字可能会不时变化。我需要的是使用正确的数字来获取“Variant”标签。在上面的例子中,我需要从“Variant5”-tag(93.9)中获取值。明天“OverRepresentedVariant”值可能已经改为3,这意味着我现在应该抓住“Variant3”值。

所以这就是我得到的。我有一个名为$btOver的变量,它包含上面的XML。我还有一个名为$btId的变量,其中包含“OverRepresentedVariant”值,如下所示:

<xsl:variable name="btId" select="$btOver/OverRepresentedVariant" />

所以现在我需要帮助找到具有正确ID的Variant-tags。我需要的标签将始终命名为“Variant”,后跟id。那么我怎样才能获得正确的标签?

1 个答案:

答案 0 :(得分:3)

StatsContainer/*[name() = concat('Variant', ../OverRepresentedVariant)]
PS:你真的应该考虑改变XML。将数据作为元素名称的一部分是一个的想法。这就是它应该是这样的:

<StatsContainer>
  <Variant id="1">0</Variant>
  <!-- ... -->
  <Variant id="12">0</Variant>
  <GlobalVariant id="1">4.6</GlobalVariant>
  <!-- ... -->
  <GlobalVariant id="12">0</GlobalVariant>
  <MosaicType>Boligtype</MosaicType>
  <OverRepresentedVariant>5</OverRepresentedVariant>
</StatsContainer>

然后XPath将是

StatsContainer/Variant[@id = ../OverRepresentedVariant]