Используя XSLT, как я могу выбрать только элементы с определенным значением атрибута? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть XML, который выглядит примерно так:

<Assessment xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" GUID="00000000-0000-0000-0000-000000000000">
  <Data ID="4543" DateCreated="2020-02-18T09:22:31.743">
    <Questions>
      <Question ID="120" RowNumber="1" ElementName="E147" ElementType="DropDownList" Type="a32c5590-cd7c-4b1f-8df5-592cd243e0e0" Required="false" IncludeComment="false">
        <Text>Foo Hours</Text>
        <Answers>
          <Answer ID="718" Type="a32c5590-cd7c-4b1f-8df5-592cd243e0e0">
            <Text>.25</Text>
          </Answer>
        </Answers>
      </Question>
      <Question ID="121" RowNumber="2" ElementName="E121" ElementType="CheckBoxList" Type="22c5e458-d3ff-4f45-b669-ba0ec8f3703d" Required="false" IncludeComment="false">
        <Text>Foo</Text>
        <Answers>
          <Answer ID="739" Type="22c5e458-d3ff-4f45-b669-ba0ec8f3703d">
            <Text>This is some text</Text>
          </Answer>
        </Answers>
      </Question>
      <Question ID="122" RowNumber="3" ElementName="E142" ElementType="TextBox" Type="" Required="false" IncludeComment="false">
        <Text>Other</Text>
        <Answers>
          <Answer Type="Assessment6" Qualifier="E142">
            <Text>42</Text>
          </Answer>
        </Answers>
      </Question>
      <Question ID="123" RowNumber="4" ElementName="E148" ElementType="DropDownList" Type="a32c5590-cd7c-4b1f-8df5-592cd243e0e0" Required="false" IncludeComment="false">
        <Text>Bar Hours</Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
      <Question ID="124" RowNumber="5" ElementName="E122" ElementType="CheckBoxList" Type="3d29c234-99de-4ba1-a8a1-a3e20a6e880c" Required="false" IncludeComment="false">
        <Text>Bar </Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
      <Question ID="125" RowNumber="6" ElementName="E123" ElementType="TextBox" Type="" Required="false" IncludeComment="false">
        <Text>Other</Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
      <Question ID="126" RowNumber="7" ElementName="E149" ElementType="DropDownList" Type="a32c5590-cd7c-4b1f-8df5-592cd243e0e0" Required="false" IncludeComment="false">
        <Text>Baz Hours</Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
      <Question ID="127" RowNumber="8" ElementName="E124" ElementType="CheckBoxList" Type="5b6901f2-2e52-483b-9b4c-9426744c1076" Required="false" IncludeComment="false">
        <Text>Baz</Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
      <Question ID="128" RowNumber="9" ElementName="E125" ElementType="TextBox" Type="" Required="false" IncludeComment="false">
        <Text>Other</Text>
        <Answers>
          <Answer />
        </Answers>
      </Question>
    </Questions>
  </Data>
</Assessment>

Я хочу выбрать все теги Question, которые имеют ElementType значения атрибута DropDownList, и сложить их значения. Поэтому я попробовал это:

<xsl:value-of select="sum(Data/Questions/Question[@ElementType=DropDownList]/Answers/Answer/Text)" />

Но я получаю ноль по какой-то причине. Если я опускаю условное выражение [@ElementType=DropDownList], я получаю NaN, который указывает, что все значения суммируются, включая текстовые значения. Так что с этим условием что-то не так, но я не уверен, что ...

1 Ответ

0 голосов
/ 20 февраля 2020

О, я понял это; Мне нужны кавычки вокруг значения, которое я тестирую:

<xsl:value-of select="sum(Data/Questions/Question[@ElementType='DropDownList']/Answers/Answer/Text)" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...