У меня есть следующий XML:XSLT: удаление дочерних узлов, не повторяя XPath
<?xml version="1.0"?>
<Transaction>
<Product>
<ProductRq>
<ContactInfo>
<!-- several child elements -->
</ContactInfo>
<OrderInfo>
<!-- several child elements -->
</OrderInfo>
<ProductInfo>
<!-- several child elements -->
</ProductInfo>
<AddressInfo>
<!-- several child elements -->
</AddressInfo>
<AuditInfo>
<!-- several child elements -->
</AuditInfo>
<DeliveryInfo>
<!-- several child elements -->
</DeliveryInfo>
</ProductRq>
</Product>
</Transaction>
Для краткости я опустил еще несколько детей в <ProductRq>
тег, который содержит 4 или 5 больше дочерних элементов сродни до <OrderInfo>
и <CustomerInfo>
, а также дочерние узлы элементов * Info.
Мне нужно удалить дочерние элементы таких элементов, как Order и <CustomerInfo>
, сохраняя при этом * Информационный тег. Из 7 тегов около 4 должны пройти этот процесс. Я не могу думать о том, как сделать это, не повторяя:
<xsl:template match="Transcation/Product/ProductRq/<tag name here>/*" />
для каждого ребенка <ProductRq>
. Есть ли способ задействовать узел контекста (<ProductRq>
) и прописать петлю через дочерние элементы, удалив их собственные дочерние узлы помимо вышеперечисленного?
EDIT:
Я добавил оставшиеся дочерние теги <ProductRq>
. Все теги, кроме <AuditInfo>
и <ContactInfo>
, должны удалять дочерние узлы.
На самом деле вам не нужно указывать полный xpath в совпадении с шаблонами, вы можете просто выполнить ' '. Вам нужно будет только квалифицировать его полным путем, если один и тот же элемент может встречаться на разных уровнях иерархии, и вам нужно их отличить. –
Я думаю, что есть шанс, что некоторые дочерние элементы ProductRq могут повториться для разных тегов дальше документа, но ProducerRq уникален, так что ProducerRq/ будет достаточно? –
jbailie1991
@ jbailie1991 - вам действительно нужно будет показать этих пропущенных детей, поскольку они очень важны для вашего вопроса. Покажите, по крайней мере, детей * ProductRq *. – Parfait