XPath помогите.Получить дочерний узел с именем переменной - PullRequest
2 голосов
/ 10 июня 2010

У меня есть следующий 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» (93,9). Завтра значение "OverRepresentedVariant" могло бы измениться на 3, это означало бы, что теперь я должен вместо этого взять значение "Variant3".

Так вот что я получил. У меня есть переменная с именем $btOver, которая содержит вышеуказанный XML. У меня также есть переменная с именем $btId, которая содержит значение «OverRepresentedVariant», например:

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

Так что теперь мне нужна помощь в поиске тегов Variant с правильным идентификатором. Теги, которые мне нужны, всегда будут называться «Вариант», за которым следует идентификатор. Итак, как я могу получить правильный тег?

1 Ответ

3 голосов
/ 10 июня 2010
StatsContainer/*[name() = concat('Variant', ../OverRepresentedVariant)]

PS: Вы действительно должны подумать об изменении XML. Использование данных в качестве имени элемента является идеей bad . Вот как это должно выглядеть:

<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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...