Введите ниже XML, сначала мне нужно исключить узлы с пустым узлом сведений об образовании. И я мог добиться этого, выполнив <xsl:template match="parent/child[education = '']"/>
. Теперь из возвращенных результатов мне нужно удалить узел namedetails
, если значение test1
в нем не совпадает с child/name/lastname
. Я должен применить это только к XML данным, полученным при удалении пустого узла образования. Когда я пытаюсь использовать <xsl:template match="parent/namedetails[test1 = parent/child/name[@lastname]]"/>
, он не фильтрует, как я ожидал. Вместо этого включает весь узел namedetails. Пожалуйста, предложите.
Ввод XML:
<?xml version="1.0" encoding="UTF-8"?>
<parent>
<namedetails>
<test1>xyz</test1>
<test2>match1</test2>
</namedetails>
<child>
<age>30</age>
<name>
<firstname>abc</firstname>
<lastname>xyz</lastname>
<middlename>v</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>No</masters>
</education>
<dob>25-MAR-1990</dob>
<location>city123</location>
</child>
<namedetails>
<test1>123</test1>
<test2>match2</test2>
</namedetails>
<child>
<age>29</age>
<name>
<firstname>def</firstname>
<lastname>123</lastname>
<middlename>a</middlename>
</name>
<education/>
<dob>25-MAR-1991</dob>
<location>city123</location>
</child>
<namedetails>
<test1>345w</test1>
<test2>match3</test2>
</namedetails>
<child>
<age>35</age>
<name>
<firstname>ghi</firstname>
<lastname>345</lastname>
<middlename>r</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>Yes</masters>
</education>
<dob>25-MAR-1985</dob>
<location>city123</location>
</child>
</parent>
Желаемый выход XML:
<?xml version="1.0" encoding="UTF-8"?>
<parent>
<namedetails>
<test1>xyz</test1>
<test2>match1</test2>
</namedetails>
<child>
<age>30</age>
<name>
<firstname>abc</firstname>
<lastname>xyz</lastname>
<middlename>v</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>No</masters>
</education>
<dob>25-MAR-1990</dob>
<location>city123</location>
</child>
<namedetails>
<test1>345w</test1>
<test2>match3</test2>
</namedetails>
<child>
<age>35</age>
<name>
<firstname>ghi</firstname>
<lastname>345</lastname>
<middlename>r</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>Yes</masters>
</education>
<dob>25-MAR-1985</dob>
<location>city123</location>
</child>
</parent>
Используемый XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="parent/child[education = '']"/>
<xsl:template match="parent/namedetails[test1 = parent/child/name[@lastname]]"/>
</xsl:stylesheet>
Полученный Результат:
<parent>
<namedetails>
<test1>xyz</test1>
<test2>match1</test2>
</namedetails>
<child>
<age>30</age>
<name>
<firstname>abc</firstname>
<lastname>xyz</lastname>
<middlename>v</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>No</masters>
</education>
<dob>25-MAR-1990</dob>
<location>city123</location>
</child>
<namedetails>
<test1>123</test1>
<test2>match2</test2>
</namedetails>
<namedetails>
<test1>345w</test1>
<test2>match3</test2>
</namedetails>
<child>
<age>35</age>
<name>
<firstname>ghi</firstname>
<lastname>345</lastname>
<middlename>r</middlename>
</name>
<education>
<graduate>Yes</graduate>
<masters>Yes</masters>
</education>
<dob>25-MAR-1985</dob>
<location>city123</location>
</child>
</parent>