Как получить значения из двух разных тегов и объединить их с помощью XSLT - PullRequest
0 голосов
/ 24 мая 2018

Я бы попытался преобразовать XML-файл в CSV, и мне нужна помощь по следующей ссылке , но я столкнулся с тем, что мне нужно извлечь значение из двух разных тегов, существующих в одном и том жеуровень.Из первого тега я должен выбрать значение, а из следующего тега - значения его дочерних и дочерних тегов.Чтобы выбрать значения из второго тега, я использую итератор и, наконец, мне нужно опубликовать вывод в той же строке, но я не знаю, как выбрать значения из первого тега, а также из второго тега и объединить значенияпервый тег со значениями из второго тега.Для большей ясности я приложил следующий пример вывода:
Мой пример входного XML выглядит следующим образом:

<PayLocation>
    <LocationCode>VNS</LocationCode>
    <LocationDescription>VARANASI</LocationDescription>
    <PayrunDetails>
        <PayrunNumber>000428</PayrunNumber>
    </PayrunDetails>
    <CompanyDetails>
        <CompanyCode>Stack99</CompanyCode>
        <CompanyName>StackOverFlow</CompanyName>

        <Payslip>
            <StaffNumber>123456</StaffNumber>
            <StaffName>ALIBABA</StaffName>      
            <PayDetails>
                <AmountNet>2100</AmountNet> 
                <ComponentDetails>
                    <ComponentType>SALARY</ComponentType>
                    <Code>SAL</Code>
                </ComponentDetails>                          
            </PayDetails>
            <LeaveTaken>
                <Description>LEAVE</Description>
                <StartDate/>
                <EndDate/>
            </LeaveTaken>
        </Payslip>

        <Payslip>
            <StaffNumber>456789</StaffNumber>
            <StaffName>AMAZON</StaffName>      
            <PayDetails>
                <AmountNet>2200</AmountNet> 
                <ComponentDetails>
                    <ComponentType>SALARY</ComponentType>
                    <Code>SAL</Code>
                </ComponentDetails>                         
            </PayDetails>
            <LeaveTaken>
                <Description>LEAVE</Description>
                <StartDate>2015-05-28</StartDate>
                <EndDate>2015-05-31</EndDate>
            </LeaveTaken>
        </Payslip>
    </CompanyDetails>
</PayLocation>

Мой ожидаемый пример вывода следующий:

output sample

Вышеприведенный вывод содержит значения первого столбца, полученные из первого тега, и остальные значения, полученные из второго тега и его дочерних тегов.

Я также делюсь своим XSL-файлом:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">
StaffNumber,Payslip
<xsl:for-each select="//PayLocation/CompanyDetails/Payslip">
<xsl:value-of select="concat(StaffNumber,',',PayDetails/AmountNet,'&#xA;')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Обратите внимание, что я не упомянул PayNumber, CompanyCode, CompanyName в вышеуказанном XSL-файле, потому что я незнать, как выбрать значения первого тега вместе со вторым тегом.Я довольно новичок в XSLT, поэтому прошу прощения за потенциальный вопрос новичка.Любое руководство будет оценено здесь.Заранее спасибо.

1 Ответ

0 голосов
/ 25 мая 2018

Чтобы получить CompanyCodeCompanyName), вы можете просто сделать это

parent::*/CompanyCode

, т.е. получить дочернего элемента CompanyCode под текущим родителем

. Это может бытьупрощено до этого

../CompanyCode

И аналогично, чтобы получить номер платежа, который является дочерним от прародителя, сделайте это ...

../../PayrunDetails/PayrunNumber

Попробуйте это XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>PayNumber,CompanyCode,CompanyNameStaffNumber,Payslip&#10;</xsl:text>
    <xsl:for-each select="//PayLocation/CompanyDetails/Payslip">
        <xsl:value-of select="concat(../../PayrunDetails/PayrunNumber,',',../CompanyCode,',',../CompanyName,',',StaffNumber,',',PayDetails/AmountNet,'&#xA;')"/>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...