XML в XML Преобразование XSLT-преобразования - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь сопоставить формат XML с XML через XSLT. Мой код хорошо работает при использовании преобразования XSL в Studio, но при подключении к исходящему EIB некоторые поля не работают специально при нескольких xpaths.

Вот XML:

<?xml version="1.0" encoding="UTF-8"?>
<wd:Report_Data xmlns:wd="urn:com.workday.report/Job_Requisition_Details">
<wd:Report_Entry>

<wd:Job_ID>12345</wd:Job_ID>

<wd:Job_Title>Associate Manager, Packaging Engineer</wd:Job_Title>

<wd:Time_Type wd:Descriptor="Full time">
<wd:ID wd:type="WID">c6ae74e96c9c45569afea6b4c1bb5ca5</wd:ID>
<wd:ID wd:type="Position_Time_Type_ID">Full_time</wd:ID>
</wd:Time_Type>

</wd:Report_Entry>

</wd:Report_Data>

Вот мой код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:wd="urn:com.workday.report/Job_Requisition_Details" version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <!-- TODO: Auto-generated template -->
        
        <body>
        <xsl:for-each select="wd:Report_Data/wd:Report_Entry">
            <wd:Job_ID>
                <xsl:value-of select="wd:Job_ID"/>
            </wd:Job_ID>
            <wd:Job_Title>
                <xsl:value-of select="wd:Job_Title"></xsl:value-of>
            </wd:Job_Title>
            <wd:Time_Type>
                <xsl:for-each select="wd:Time_Type">
                    <wd:Descriptor>
                    <xsl:value-of select="@wd:Descriptor"></xsl:value-of>
                    </wd:Descriptor>
                    <wd:WID>
                    <xsl:value-of select="wd:ID[@wd:type = 'WID']"></xsl:value-of>
                    </wd:WID>                    
                    <wd:Position_Time_Type>
                    <xsl:value-of select="wd:ID[@wd:type = 'Position_Time_Type_ID']"></xsl:value-of>
                    </wd:Position_Time_Type>
                </xsl:for-each>
            </wd:Time_Type>                

        </xsl:for-each>
        </body>
    
    </xsl:template>

</xsl:stylesheet>

Вот результат после присоединения к исходящему EIB:

<?xml version="1.0" encoding="UTF-8"?>
<body xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:fn="http://www.w3.org/2005/xpath-functions"
      xmlns:wd="urn:com.workday.report/Job_Requisition_Details">
   <wd:Job_ID>12345</wd:Job_ID>
   <wd:Job_Title>Associate Manager, Packaging Engineer</wd:Job_Title>
   <wd:Time_Type>
      </wd:Descriptor>
      </wd:WID>
      </wd:Position_Time_Type>
   </wd:Time_Type>
</body>

Требуемый вывод:

<?xml version="1.0" encoding="UTF-8"?>
<body xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:fn="http://www.w3.org/2005/xpath-functions"
      xmlns:wd="urn:com.workday.report/Job_Requisition_Details">
   <wd:Job_ID>12345</wd:Job_ID>
   <wd:Job_Title>Associate Manager, Packaging Engineer</wd:Job_Title>
   <wd:Time_Type>
      <wd:Descriptor>Full time</wd:Descriptor>
      <wd:WID>c6ae74e96c9c45569afea6b4c1bb5ca5</wd:WID>
      <wd:Position_Time_Type>Full_time</wd:Position_Time_Type>
   </wd:Time_Type>
</body>

Помогите, тоже пробовал разные объявления, но все равно не работает. Заранее благодарю

...