Я не думаю, что в oXygen есть автоматизированный способ сделать это.Вы могли бы сделать простое XSLT-преобразование, хотя.Похоже, что в DTD всегда есть 12 Data
элементов, которые соответствуют 12 элементам в item
.Если это так, вы можете основывать преобразование Data
элементов на их позиции.
Вот пример таблицы стилей ( ПРИМЕЧАНИЕ. Я выводлю DOCTYPE с системным идентификатором, чтобы легко проверить выводв oXygen; вы можете удалить / изменить это ):
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" doctype-system="test.dtd"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="globalcoverage">
<coverturamundial>
<xsl:apply-templates/>
</coverturamundial>
</xsl:template>
<xsl:template match="carrier">
<item>
<xsl:apply-templates/>
</item>
</xsl:template>
<xsl:template match="Data[1]">
<continent>
<xsl:apply-templates/>
</continent>
</xsl:template>
<xsl:template match="Data[2]">
<county>
<xsl:apply-templates/>
</county>
</xsl:template>
<xsl:template match="Data[3]">
<operator>
<xsl:apply-templates/>
</operator>
</xsl:template>
<xsl:template match="Data[4]">
<frequency>
<xsl:apply-templates/>
</frequency>
</xsl:template>
<xsl:template match="Data[5]">
<signature>
<xsl:apply-templates/>
</signature>
</xsl:template>
<xsl:template match="Data[6]">
<gsm>
<xsl:apply-templates/>
</gsm>
</xsl:template>
<xsl:template match="Data[7]">
<gprs>
<xsl:apply-templates/>
</gprs>
</xsl:template>
<xsl:template match="Data[8]">
<_3g>
<xsl:apply-templates/>
</_3g>
</xsl:template>
<xsl:template match="Data[9]">
<payment>
<xsl:apply-templates/>
</payment>
</xsl:template>
<xsl:template match="Data[10]">
<sms>
<xsl:apply-templates/>
</sms>
</xsl:template>
<xsl:template match="Data[11]">
<zone>
<xsl:apply-templates/>
</zone>
</xsl:template>
<xsl:template match="Data[12]">
<status>
<xsl:apply-templates/>
</status>
</xsl:template>
</xsl:stylesheet>
Вот что вывод будет использовать ваш пример ввода (измененный, чтобы сделать его правильно сформированным):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE coverturamundial
SYSTEM "test.dtd">
<coverturamundial>
<item>
<continent>CONTINENT</continent>
<county>COUNTY</county>
<operator>OPERATOR</operator>
<frequency>FREQUENCY</frequency>
<signature>SIGNATURE</signature>
<gsm>GSM</gsm>
<gprs>GPRS</gprs>
<_3g>3G</_3g>
<payment>PAYMENT</payment>
<sms>SMS</sms>
<zone>ZONE</zone>
<status>STATUS</status>
</item>
<item>
<continent>AFRICA</continent>
<county>ZAMBIA</county>
<operator>MTN Zambia</operator>
<frequency>GSM 900</frequency>
<signature>2006-08-14</signature>
<gsm>X</gsm>
<gprs>X</gprs>
<_3g>X</_3g>
<payment>X</payment>
<sms>X</sms>
<zone>NA</zone>
<status>0</status>
</item>
</coverturamundial>
Если вы не хотите делать отдельные xsl:template
для data
элементов, вы можете сделать что-то вроде:
<xsl:template match="Data">
<xsl:choose>
<xsl:when test="position()=1">
<continent>
<xsl:apply-templates/>
</continent>
</xsl:when>
<xsl:when test="position()=2">
<county>
<xsl:apply-templates/>
</county>
</xsl:when>
</xsl:choose>
...
</xsl:template>
Надеюсь, это поможет.