Предположим, у меня есть следующий входной файл:
<root>
<container_items>
<item Id="a">
<Content Name="red_dark" />
</item>
<item Id="b">
<Content Name="yellow" />
</item>
<item Id="c">
<Content Name="blue_dark" />
</item>
<item Id="d">
<Content Name="green" />
</item>
</container_items>
<container_refs>
<item_ref Id="a" />
<item_ref Id="b" />
<item_ref Id="c" />
<item_ref Id="d" />
</container_refs>
</root>
Реальный файл немного сложнее, но я приведу здесь более простые критерии, чтобы убрать те элементы 'item', которые имеют ' Дочерний элемент содержимого с атрибутом Name, оканчивающимся на «_dark». Мне удалось удалить ненужные элементы item, однако соответствующие элементы item_ref остались. Допустим, я удалил элементы item, соответствующие моим критериям. Моя цель - также удалить элементы item_ref с Id = "a" или = "c" (это идентификаторы совпадающих и удаленных элементов item). Таким образом, ожидаемый конечный результат:
<root>
<container_items>
<item Id="b">
<Content Name="yellow" />
</item>
<item Id="d">
<Content Name="green" />
</item>
</container_items>
<container_refs>
<item_ref Id="b" />
<item_ref Id="d" />
</container_refs>
</root>
Очевидно, мне нужно удалить все элементы 'item_ref', которые имеют атрибут Id, со значением в списке значений, собранных из определенных атрибутов Id элементов 'item' ( которые соответствуют моим существующим критериям для элементов 'item').
Мой XSL-файл является следующим (фокусируется только на критериях):
<xsl:template match="//item[./Content[substring(@Name, string-length(@Name)- string-length('_dark') + 1) = '_dark']]" />
На основе моих критериев элементы 'item' соответствующие критерии удаляются, но затем связанные элементы item_ref остаются во входном файле, что приводит к следующему результату:
<root>
<container_items>
<item Id="b">
<Content Name="yellow" />
</item>
<item Id="d">
<Content Name="green" />
</item>
</container_items>
<container_refs>
<item_ref Id="a" />
<item_ref Id="b" />
<item_ref Id="c" />
<item_ref Id="d" />
</container_refs>
</root>
Заранее благодарим за поддержку.