Я ищу способ (если это вообще возможно) использовать XSL-преобразование документа XSD для удаления неиспользуемых элементов. Это часто встречается в моей работе, когда компания будет определять XSD абсолютно со всем, что есть в нем, но затем они захотят создать урезанную версию для одного корневого элемента в нем.
Для дальнейшего объяснения, у меня может быть XSD, подобный следующему:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="RootElement">
<xs:complexType>
<xs:sequence>
<xs:element ref="ChildElement"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ChildElement"/>
<xs:element name="UnusedElement"/>
</xs:schema>
Я бы хотел создать XSL, в котором я предоставляю начальный элемент (в данном случае RootElement
]), и он скопирует все зависимые элементы, но опустит неиспользуемые. В приведенном выше примере, если я передал RootElement, я ожидал бы увидеть RootElement
и ChildElement
включенными, но UnusedElement
опущенными.
(Когда я говорю «предоставить начальный элемент», я очень рад вскрыть таблицу стилей и набрать xsl: template match = "RootElement"
там, где требуется.)
Очевидно, это могло бы помочь. должны быть рекурсивными, чтобы перемещаться по всей структуре, определенной под начальным элементом, и любой элемент в этой схеме, который не использовался, будет отброшен.
(Конечно, было бы даже лучше, если бы он мог делать то же самое в любых импортированных схемах!)
Я много искал в Google и ничего не нашел по этому поводу - я не уверен, что это означает это невозможно или нет.
Спасибо!
Правка : На самом деле мне, вероятно, следует уточнить и сказать, что я хотел бы удалить неиспользуемые элементы И типы, чтобы он соответствовал как ref = "childElement"
, так и type = "someType "
ссылки.