Удаление specfic узлов из XML с помощью XSLTУдаление specfic узлов из XML с помощью XSLT
мой вопрос имеет две части
1) удаление specfic узлов из XML с помощью XSLT
2) один раз в XSLT , это должно быть сделано во время выполнения. Устанавливаемые значения узлов будут переданы как параметр
<?xml version="1.0" encoding="UTF-8"?>
<Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<Category>History</Category>
</Header>
<Body messagetype="Personal">
<Books>
<Book>
<authorDetails>
<title>The white tiger</title>
<author>Arvind Adiga</author>
</authorDetails>
<sellerDetails sellerType="Private">
<address >
<country>India</country>
<city>chennai</city>
</address >
</sellerDetails>
<identification>
<isbnNumber>AAAA1234</isbnNumber>
</identification>
</Book>
<Book>
<authorDetails>
<title>The white tiger</title>
<author>Arvind Adiga</author>
</authorDetails>
<sellerDetails sellerType="Private">
<address >
<country>India</country>
<city>chennai</city>
</address >
</sellerDetails>
<identification>
<isbnNumber>BBB12343</isbnNumber>
</identification>
</Book>
</Books>
</Body>
</Message>
Th e выше - образец xml , номер isbn будет передаваться динамически, и xslt должен иметь возможность получать значения номера isbn в качестве параметра в java-коде и удалять определенные узлы во время выполнения и преобразовывать xml с узлами прошел.
жаль кладя botht вопрос в том же месте это willbe удобно, если я получить ответы отдельно
До сих пор я удалось создать этот XSLT, который возвращает все значения
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="codes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="segment">
<xsl:choose>
<xsl:when test="contains($codes, code/@Value)" /> <!-- Do nothing -->
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Martin THATS 100 баллов за ответ, который вы дали, и он работал хорошо, У меня все еще есть проблема, что я дал exmaple xml для простоты/соображений безопасности здесь, но исходный xml, с которым я работаю, имеет пространство имен и также как ant isbn number не является прямым элементом в качестве мено определяется здесь
Пожалуйста, смотрите ниже исходного XML и трансформировали XML после применения XSLT оригинальный XML
<?xml version="1.0" encoding="UTF-8"?>
<dt:Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dt="urn:aaaaaaaa" xmlns="urn:bbbbbbb" xmlns:cm="urn:cccccccc" xmlns:stf="dddddd" ">
<Header>
<Category>History</Category>
</Header>
<dt:Body >
<Books>
<Book>
<authorDetails>
<cm:Birth>
<cm:BirthDate>
<cm:DateYMD>1988-01-01</cm:DateYMD>
</cm:BirthDate>
</cm:Birth>
<cm:Address addressType="residential">
<cm:CountryCode>GB</cm:CountryCode>
<cm:AddressStruct>
<cm:Street>london</cm:Street>
<cm:PostCode>sddas</cm:PostCode>
<cm:City>london</cm:City>
</cm:AddressStruct>
</cm:Address>
<cm:Name>
<cm:NameFree>James Bond</cm:NameFree>
</cm:Name>
</authorDetails>
<sellerDetails>
<sellerDetail sellerType="Private">
</sellerDetail>
</sellerDetails>
<BookSpec>
<stf:BookTypeIndic>2</stf:BookTypeIndic>
<stf:BookRefId>AAAAAA111111111</stf:BookRefId>
<stf:BookCorrRefId>BBBBBB2222222222</stf:BookCorrRefId>
</BookSpec>
</Book>
<Book>
<authorDetails>
<cm:Birth>
<cm:BirthDate>
<cm:DateYMD>1995-01-01</cm:DateYMD>
</cm:BirthDate>
</cm:Birth>
<cm:Address addressType="residential">
<cm:CountryCode>GB</cm:CountryCode>
<cm:AddressStruct>
<cm:Street>ripper Street</cm:Street>
<cm:PostCode>sddas</cm:PostCode>
<cm:City>london</cm:City>
</cm:AddressStruct>
</cm:Address>
<cm:Name>
<cm:NameFree>James Bond</cm:NameFree>
</cm:Name>
</authorDetails>
<sellerDetails>
<sellerDetail sellerType="Private">
</sellerDetail>
</sellerDetails>
<BookSpec>
<stf:BookTypeIndic>2</stf:BookTypeIndic>
<stf:BookRefId>CCCCCC33333333</stf:BookRefId>
<stf:BookCorrRefId>DDDDDD4444444</stf:BookCorrRefId>
</BookSpec>
</Book>
<Book>
<authorDetails>
<cm:Birth>
<cm:BirthDate>
<cm:DateYMD>1995-01-01</cm:DateYMD>
</cm:BirthDate>
</cm:Birth>
<cm:Address addressType="residential">
<cm:CountryCode>GB</cm:CountryCode>
<cm:AddressStruct>
<cm:Street>ripper Street</cm:Street>
<cm:PostCode>sddas</cm:PostCode>
<cm:City>london</cm:City>
</cm:AddressStruct>
</cm:Address>
<cm:Name>
<cm:NameFree>James Bond</cm:NameFree>
</cm:Name>
</authorDetails>
<sellerDetails>
<sellerDetail sellerType="Private">
</sellerDetail>
</sellerDetails>
<BookSpec>
<stf:BookTypeIndic>2</stf:BookTypeIndic>
<stf:BookRefId>EEEEEE555555555</stf:BookRefId>
<stf:BookCorrRefId>FFFFFF66666666666</stf:BookCorrRefId>
</BookSpec>
</Book>
</Books>
</dt:Body>
</dt:Message>
Преобразованный XML при переходе параметров { " 'CCCCCC33333333', 'EEEEEE555555555'"}
<?xml version="1.0" encoding="UTF-8"?>
<dt:Message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dt="urn:aaaaaaaa" xmlns="urn:bbbbbbb" xmlns:cm="urn:cccccccc" xmlns:stf="dddddd" ">
<Header>
<Category>History</Category>
</Header>
<dt:Body >
<Books>
<Book>
<authorDetails>
<cm:Birth>
<cm:BirthDate>
<cm:DateYMD>1988-01-01</cm:DateYMD>
</cm:BirthDate>
</cm:Birth>
<cm:Address addressType="residential">
<cm:CountryCode>GB</cm:CountryCode>
<cm:AddressStruct>
<cm:Street>london</cm:Street>
<cm:PostCode>sddas</cm:PostCode>
<cm:City>london</cm:City>
</cm:AddressStruct>
</cm:Address>
<cm:Name>
<cm:NameFree>James Bond</cm:NameFree>
</cm:Name>
</authorDetails>
<sellerDetails>
<sellerDetail sellerType="Private">
</sellerDetail>
</sellerDetails>
<BookSpec>
<stf:BookTypeIndic>2</stf:BookTypeIndic>
<stf:BookRefId>AAAAAA111111111</stf:BookRefId>
<stf:BookCorrRefId>BBBBBB2222222222</stf:BookCorrRefId>
</BookSpec>
</Book>
</Books>
</dt:Body>
</dt:Message>
Вы говорите «узлы» во множественном числе. Это будет строка? Если да, можете ли вы показать нам, как именно он будет отформатирован? Или, может быть, вы предпочли бы иметь коды в другом документе XML и передать путь к этому документу в качестве параметра? –
Почему у вас есть «match =» сегмент «' в XSLT, но не элемент 'segment' в образце ввода XML? –
@Martin Honnen -sorry матч должен быть сделан в книгах как match = "Book" –