Я почти полный новичок в XML, и мне нужна помощь в создании шаблона XSLT, чтобы не отображать элемент, если у него нет заполненного элемента:Шаблон XSLT для удаления элемента, если он не содержит определенного подэлемента
Я постараюсь описать то, что я имею в виду под с некоторой например входом и желаемый результат:
вход:
<shop>
<item>
<ID>12344</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
<info>
<Attributes>
<authcode>DS2978</authcode>
<PRICE>
<CURRENCY>DKK</CURRENCY>
<SALESPRICE>296</SALESPRICE>
</PRICE>
<Condition>used</Condition>
<garanty>Yes</garanty>
<garanty_length>2 months</garanty_length>
<Label_name>demo</Label_name>
</Attributes>
</info>
</item>
<item>
<ID>12345</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
</item>
</shop>
Желаемая выход:
<shop>
<item>
<ID>12344</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
<info>
<Attributes>
<authcode>DS29783</authcode>
<PRICE>
<CURRENCY>DKK</CURRENCY>
<SALESPRICE>296</SALESPRICE>
</PRICE>
<Condition>used</Condition>
<garanty>Yes</garanty>
<garanty_length>2 months</garanty_length>
<Label_name>demo</Label_name>
</Attributes>
</info>
</item>
</shop>
Таким образом, в основном, если <info>
элемент не заполнен, то она должна скрыть весь <item>
элемент.
Я надеюсь, что кто-то там захочет дать нам совет, как я мог бы это достичь. Благодаря
Ваш вход не является корректным XML: отсутствует один корневой элемент, и между '- ' и'
'существует несоответствие' (XML чувствителен к регистру). Также обратите внимание, что 'info' в вашем примере является * элементом *, а не * атрибутом *. –
Один из способов сделать это - использовать шаблон * identity transform *, а также пустой шаблон, соответствующий 'item [not (info)]'. –
С моим редактированием я сменил два из ваших имен элементов: 'Item' на' item' и 'authcodeE' на' authcode', чтобы сделать XML-файлы хорошо сформированными. Считают, что. – zx485