Saya memiliki payload di bawah xml. Saya hanya membutuhkan bagian job_information paling atas. Bagian informasi_pekerjaan lain yang akan disaring. Apakah ada cara agar saya bisa mencapai ini?

Muatan XML:

<?xml version='1.0' encoding='UTF-8'?>
<queryCompoundEmployeeResponse>
    <CompoundEmployee>
        <id>858</id>
        <person>
            <person_id_external>484304</person_id_external>
            <employment_information>
                <user_id>484304</user_id>
                <job_information>
                    <end_date>2020-06-30</end_date>
                    <start_date>2020-06-23</start_date>
                </job_information>
                <job_information>
                    <end_date>2020-06-22</end_date>
                    <start_date>2020-05-11</start_date>
                </job_information>
                <job_information>
                    <end_date>2020-05-10</end_date>
                    <start_date>2020-01-01</start_date>
                </job_information>
            </employment_information>
        </person>
    </CompoundEmployee>
</queryCompoundEmployeeResponse>

Keluaran yang diharapkan:

<?xml version='1.0' encoding='UTF-8'?>
<queryCompoundEmployeeResponse>
    <CompoundEmployee>
        <id>858</id>
        <person>
            <person_id_external>484304</person_id_external>
            <employment_information>
                <user_id>484304</user_id>
                <job_information>
                    <end_date>2020-06-30</end_date>
                    <start_date>2020-06-23</start_date>
                </job_information>
            </employment_information>
        </person>
    </CompoundEmployee>
</queryCompoundEmployeeResponse>

Saya mencoba skrip XSL di bawah ini tetapi tidak berhasil:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>
 
 <xsl:template match="//CompoundEmployee/person/employment_information/job_information[position()=1]"/>
 
   
 </xsl:stylesheet>
0
sravan kumar 1 Juli 2020, 18:00

1 menjawab

Jawaban Terbaik

Cukup saring secara posisi semua node setelah yang pertama. Karena Anda memanggil transformasi identitas, cukup cocokkan langsung pada simpul yang dibutuhkan, job_information.

Ingat template kosong menghapus node dan isinya karena Anda tidak menerapkan aturan gaya apa pun ke kecocokan. Dan karena simbol lebih besar dari adalah simbol khusus, >, dalam XML, gunakan entitas &gt;.

<xsl:template match="job_information[position() &gt; 1]" />

Demo Online

1
Parfait 1 Juli 2020, 15:12