AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79248221
Accepted
AJW
AJW
Asked: 2024-12-03 23:30:17 +0800 CST2024-12-03 23:30:17 +0800 CST 2024-12-03 23:30:17 +0800 CST

Entrada de correspondência XSLT em outro nó XML e retorna um elemento correspondente

  • 772

Aviso: ainda estou aprendendo XML/XSLT, então peço desculpas se isso for simples.

Estou tentando procurar um elemento no nó A, combiná-lo com um elemento semelhante no nó B e retornar uma entrada do nó B para o nó A.

ou seja, encontre o startDate em EmployeeTimeSheetEntry que corresponde a EmployeeTimeValuationResult/bookingDate e retorne o elemento cust_Overtime_HR_Action correspondente :

insira a descrição da imagem aqui

Estou tentando usar uma chave para gerar uma pesquisa (com base na resposta a esta pergunta: Imprimir tokens separados por vírgula quando eles forem pesquisados ​​em outro nó ), mas não tenho muita clareza sobre onde colocar a instrução apply-templates para recuperar o nó (e estou me confundindo muito agora, andando em círculos).

Exemplo de XML de origem:

<EmployeeTimeSheet>
<EmployeeTimeSheet>
  <employeeTimeSheetEntry>
    <EmployeeTimeSheetEntry>
      <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
      <startDate>2024-11-25T00:00:00.000</startDate>
    </EmployeeTimeSheetEntry>
    <EmployeeTimeSheetEntry>
      <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
      <startDate>2024-11-27T00:00:00.000</startDate>
    </EmployeeTimeSheetEntry>
    <EmployeeTimeSheetEntry>
      <cust_Overtime_HR_ACTION>Payout</cust_Overtime_HR_ACTION>
      <startDate>2024-11-30T00:00:00.000</startDate>
    </EmployeeTimeSheetEntry>
  </employeeTimeSheetEntry>
  <employeeTimeValuationResult>
    <EmployeeTimeValuationResult>
      <bookingDate>2024-11-25T00:00:00.000</bookingDate>
    </EmployeeTimeValuationResult>
  </employeeTimeValuationResult>
</EmployeeTimeSheet>

E é isso que estou tentando (e falhando) fazer no XSLT:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- generate lookup table - must be top level, i.e. before template match -->
<xsl:key name="timeSheetEntry" match="EmployeeTimeSheet/EmployeeTimeSheet/employeeTimeSheetEntry/EmployeeTimeSheetEntry" use="startDate"/>

<xsl:template match="/">

<EmployeeTimeSheet>

<!-- retrieve cust_Overtime_HR_ACTION where the bookingDate matches the startDate in above lookup -->
<xsl:template match="/">
    <xsl:apply-templates select="key('timeSheetEntry', EmployeeTimeSheet/EmployeeTimeSheet/employeeTimeValuationResult/EmployeeTimeValuationResult/bookingDate)/cust_Overtime_HR_ACTION"/>
</xsl:template>
    <xsl:for-each select="EmployeeTimeSheet/EmployeeTimeSheet">
        <xsl:for-each select="employeeTimeValuationResult/EmployeeTimeValuationResult">
            <xsl:variable name="var_TimeValResult" select="./*"></xsl:variable>
                <EmployeeTimeSheet>
                    <xsl:copy-of select="$var_TimeValResult"/>
                    
                    <xsl:template match="cust_Overtime_HR_ACTION"> 
                    <overtimeHRaction>                  
                        <xsl:value-of select="."/>
                    </overtimeHRaction> 
                    </xsl:template> 
                    
                </EmployeeTimeSheet>
            </xsl:for-each>
        </xsl:for-each>  <!-- EmployeeTimeSheet/EmployeeTimeSheet -->
</EmployeeTimeSheet> 
</xsl:template> 

</xsl:folha de estilo>

(desculpas pelo código de nível iniciante)

A saída deve ficar assim, com o elemento cust_Overtime_HR_ACTION para 2024-11-25 adicionado ao nó EmployeeTimeValuationResult :

<EmployeeTimeSheet>
<EmployeeTimeSheet>
  <employeeTimeValuationResult>
    <EmployeeTimeValuationResult>
      <bookingDate>2024-11-25T00:00:00.000</bookingDate>
      <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
    </EmployeeTimeValuationResult>
  </employeeTimeValuationResult>
</EmployeeTimeSheet>

Alguém pode me dizer onde estou errando? Uma ferramenta de teste XSLT diz apenas:

Não foi possível gerar o documento XML usando a entrada XML/XSL fornecida. Erros foram relatados durante a compilação da folha de estilo

Não consigo descobrir a lógica necessária para recuperar o nó correspondente.

Muito obrigado antecipadamente por qualquer orientação que você possa fornecer.

Atenciosamente, AJ

xml
  • 1 1 respostas
  • 24 Views

1 respostas

  • Voted
  1. Best Answer
    michael.hor257k
    2024-12-04T00:34:51+08:002024-12-04T00:34:51+08:00

    Considere este exemplo simplificado :

    XML

    <EmployeeTimeSheet>
        <employeeTimeSheetEntry>
            <EmployeeTimeSheetEntry>
                <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
                <startDate>2024-11-25T00:00:00.000</startDate>
            </EmployeeTimeSheetEntry>
            <EmployeeTimeSheetEntry>
                <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
                <startDate>2024-11-27T00:00:00.000</startDate>
            </EmployeeTimeSheetEntry>
            <EmployeeTimeSheetEntry>
                <cust_Overtime_HR_ACTION>Payout</cust_Overtime_HR_ACTION>
                <startDate>2024-11-30T00:00:00.000</startDate>
            </EmployeeTimeSheetEntry>
        </employeeTimeSheetEntry>
        <employeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
                <hours>9</hours>
                <externalCode>ad0a255f256d44ddbe41bc6ab1d632b9</externalCode>
                <entityUUID>6CB3BB8B01C4434FABD28A84554B6A88</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-25T00:00:00.000</bookingDate>
                <hoursAndMinutes>9:00</hoursAndMinutes>
            </EmployeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
                <hours>9</hours>
                <externalCode>ee32afbee0e1452fbdcc21e9ee9e45e5</externalCode>
                <entityUUID>397C8AED082B4B5192941FF6D02C29FA</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-26T00:00:00.000</bookingDate>
                <hoursAndMinutes>9:00</hoursAndMinutes>
            </EmployeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
                <hours>6.5</hours>
                <externalCode>6d84652c40bb49c7b028fda128802100</externalCode>
                <entityUUID>73F775BAF8EA43F3BE011EB0C34601E5</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-27T00:00:00.000</bookingDate>
                <hoursAndMinutes>6:30</hoursAndMinutes>
            </EmployeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
                <hours>9</hours>
                <externalCode>1527b80a2ccf4c409e9549bb22b0da20</externalCode>
                <entityUUID>1397BD090FC0477C8C9EABE8B15939D2</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-28T00:00:00.000</bookingDate>
                <hoursAndMinutes>9:00</hoursAndMinutes>
            </EmployeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>TFX_ABSENCES_TTG</timeTypeGroup>
                <hours>2.5</hours>
                <externalCode>e2092ce1a0c6498fadc6d4caa0836ef1</externalCode>
                <entityUUID>A996867E64B9422FBC1765662286B633</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-27T00:00:00.000</bookingDate>
                <hoursAndMinutes>2:30</hoursAndMinutes>
            </EmployeeTimeValuationResult>
            <EmployeeTimeValuationResult>
                <timeTypeGroup>TFX_ABSENCES_TTG</timeTypeGroup>
                <hours>9</hours>
                <externalCode>50745ba2f6c241fc925a666aef955a50</externalCode>
                <entityUUID>65D732D727E346B79E60318C4703910C</entityUUID>
                <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
                <bookingDate>2024-11-29T00:00:00.000</bookingDate>
                <hoursAndMinutes>9:00</hoursAndMinutes>
            </EmployeeTimeValuationResult>
        </employeeTimeValuationResult>
    </EmployeeTimeSheet>
    

    XSLT 1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:key name="k1" match="EmployeeTimeSheetEntry" use="startDate" />
    
    <xsl:template match="/EmployeeTimeSheet">
        <results>
            <xsl:for-each select="employeeTimeValuationResult/EmployeeTimeValuationResult">
                <result>
                    <xsl:copy-of select="*"/>
                    <xsl:copy-of select="key('k1', bookingDate)/cust_Overtime_HR_ACTION"/>
                </result>           
            </xsl:for-each>
        </results>
    </xsl:template>
    
    </xsl:stylesheet>
    

    Resultado

    <?xml version="1.0" encoding="UTF-8"?>
    <results>
       <result>
          <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
          <hours>9</hours>
          <externalCode>ad0a255f256d44ddbe41bc6ab1d632b9</externalCode>
          <entityUUID>6CB3BB8B01C4434FABD28A84554B6A88</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-25T00:00:00.000</bookingDate>
          <hoursAndMinutes>9:00</hoursAndMinutes>
          <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
       </result>
       <result>
          <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
          <hours>9</hours>
          <externalCode>ee32afbee0e1452fbdcc21e9ee9e45e5</externalCode>
          <entityUUID>397C8AED082B4B5192941FF6D02C29FA</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-26T00:00:00.000</bookingDate>
          <hoursAndMinutes>9:00</hoursAndMinutes>
       </result>
       <result>
          <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
          <hours>6.5</hours>
          <externalCode>6d84652c40bb49c7b028fda128802100</externalCode>
          <entityUUID>73F775BAF8EA43F3BE011EB0C34601E5</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-27T00:00:00.000</bookingDate>
          <hoursAndMinutes>6:30</hoursAndMinutes>
          <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
       </result>
       <result>
          <timeTypeGroup>SCHED_WORK_TIME_A</timeTypeGroup>
          <hours>9</hours>
          <externalCode>1527b80a2ccf4c409e9549bb22b0da20</externalCode>
          <entityUUID>1397BD090FC0477C8C9EABE8B15939D2</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-28T00:00:00.000</bookingDate>
          <hoursAndMinutes>9:00</hoursAndMinutes>
       </result>
       <result>
          <timeTypeGroup>TFX_ABSENCES_TTG</timeTypeGroup>
          <hours>2.5</hours>
          <externalCode>e2092ce1a0c6498fadc6d4caa0836ef1</externalCode>
          <entityUUID>A996867E64B9422FBC1765662286B633</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-27T00:00:00.000</bookingDate>
          <hoursAndMinutes>2:30</hoursAndMinutes>
          <cust_Overtime_HR_ACTION>TOIL</cust_Overtime_HR_ACTION>
       </result>
       <result>
          <timeTypeGroup>TFX_ABSENCES_TTG</timeTypeGroup>
          <hours>9</hours>
          <externalCode>50745ba2f6c241fc925a666aef955a50</externalCode>
          <entityUUID>65D732D727E346B79E60318C4703910C</entityUUID>
          <EmployeeTimeSheet_externalCode>dd70365f71084e63b1143d4c40bd40a9</EmployeeTimeSheet_externalCode>
          <bookingDate>2024-11-29T00:00:00.000</bookingDate>
          <hoursAndMinutes>9:00</hoursAndMinutes>
       </result>
    </results>
    
    • 1

relate perguntas

  • XSL Substitui o URI do namespace por um único elemento, mas mantém os prefixos

  • Substitua os valores do elemento no arquivo xml usando xslt

  • XML - converter colunas em linhas individuais?

  • Como executar extensões SQL corretamente através do Saxon no Oxygen

  • Esquema XML: elemento A, elemento B ou ambos

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve