首页 > 解决方案 > 使用 xslt 1.0 从多节点 xml 获取特定值

问题描述

我得到了以下xml;

  <output>
    <EmployeeList>
      <Employee>
        <EmployeeInfo>
          <Id>253</Id>
          <CarrierType>Employee</CarrierType>
          <ArrivalDateTime>2021-04-20T15:10:20</ArrivalDateTime>
          <ReadOnly>false</ReadOnly>
          <Freefield>
            <DefinitionId>50012</DefinitionId>
            <Name>PersoonType</Name>
            <value>2</value>
          </Freefield>
          <Freefield>
            <DefinitionId>50014</DefinitionId>
            <Name>Roostercode</Name>
            <value>TST04</value>
          </Freefield>
          <Freefield>
            <DefinitionId>50006</DefinitionId>
            <Name>Kaart lay-out</Name>
            <value>02_Medewerker_MBO</value>
          </Freefield>
          <Freefield>
            <DefinitionId>50007</DefinitionId>
            <Name>LoXS Master</Name>
            <value>false</value>
          </Freefield>
          <LastName>Tester4</LastName>
          <FirstName>Test</FirstName>
          <Gender>Unknown</Gender>
          <Language>nl</Language>
          <Email>ttester4@work.nl</Email>
        </EmployeeInfo>
      </Employee>
    </EmployeeList>
  </output>

注意 Freefield 节点。我需要一个特定的 Freefield 节点的值,其中 DefinitionId=50014 或 Name=Roostercode。从这个 Freefield 节点我需要这个值;在本例中为“TST04”。

我尝试了以下代码的几种变体来选择值并将其分配给变量(rcode)。到目前为止,这总是会导致某种错误。

<xsl:variable name="rcode" select="/output/EmployeeList/Employee/EmployeeInfo/Freefield/[@Name='Roostercode']/value/text()"/>

任何想法来获得这个特定的价值?

也许我不能直接得到这个值,所以甚至欢迎其他方法!

解决方案需要在 xslt 1.0 中

标签: xmlselectxslt

解决方案


您的口头描述DefinitionId=50014 or Name=Roostercode几乎可以翻译成 XPath: //Freefield[DefinitionId=50014 or Name='Roostercode']/value


推荐阅读