Есть много посторонних факторов, которые усложняют это.Один из них соответствует атрибуту @class вместо имен элементов.Поэтому я сделал упрощенную версию, см. Ниже.
Вот входной файл DITA, который я использовал (я удалил ваши DTD и XSLT PI, потому что они мне не нужны для этого примера):
<?xml version="1.0" encoding="utf-8"?>
<concept>
<category>
<pattern>_ TOPIC ELEMENT ATTRIBUTE</pattern>
<template>
<srai>REQUIRED TOPIC AND MAP ELEMENT ATTRIBUTES</srai>
</template>
</category>
<category>
<pattern>TOPIC ELEMENT ATTRIBUTE _</pattern>
<template>
<srai>REQUIRED TOPIC AND MAP ELEMENT ATTRIBUTES</srai>
</template>
</category>
</concept>
Вот XSLT, который я использовал, соответствующий только именам элементов:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="concept">
<root>
<xsl:for-each select="category">
<xsl:copy-of select="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
Я добавил корневой элемент (называемый <root>
, может быть любым именем) к XSLT, чтобы вывод был правильнымXML.
А вот вывод:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<category>
<pattern>_ TOPIC ELEMENT ATTRIBUTE</pattern>
<template>
<srai>REQUIRED TOPIC AND MAP ELEMENT ATTRIBUTES</srai>
</template>
</category>
<category>
<pattern>TOPIC ELEMENT ATTRIBUTE _</pattern>
<template>
<srai>REQUIRED TOPIC AND MAP ELEMENT ATTRIBUTES</srai>
</template>
</category>
</root>
Если вы хотите, вы можете реорганизовать его обратно, чтобы использовать сопоставление атрибута @class, но я подозреваю, что вам это не нужно.Если вам это нужно, сначала убедитесь, что DTD правильно добавляет атрибуты класса.В DTD DITA атрибуты класса «по умолчанию», что означает, что они включены в каждый экземпляр XML, даже если они не находятся в буквальном смысле в XML (синтаксис см. В DTD DITA).В целях публикации DITA OT запускает предварительный процесс для файлов XML DITA, который извлекает все атрибуты @class по умолчанию перед запуском XSLT.Тогда XML выглядит примерно так:
<concept class=" topic/concept ">
<category class=" topic/foreign category-d/category ">
<pattern class=" etc ">_ TOPIC ELEMENT ATTRIBUTE</pattern>
<template class=" etc ">
<srai>REQUIRED TOPIC AND MAP ELEMENT ATTRIBUTES</srai>
</template>
</category>
[...]
И тогда ваш исходный XSLT может соответствовать атрибутам класса.Есть хорошая причина DITA для сопоставления этих атрибутов @class, но вам может и не понадобиться делать это, и вы добавляете усложнение, пытаясь это сделать.