我正在使用这个xml
<?xml version="1.0"?>
<globalcoverage>
<carrier>
<Data>CONTINENT</Data>
<Data>COUNTY</Data>
<Data>OPERATOR</Data>
<Data>FREQUENCY</Data>
<Data>SIGNATURE</Data>
<Data>GSM</Data>
<Data>GPRS</Data>
<Data>3G</Data>
<Data>PAYMENT</Data>
<Data>SMS</Data>
<Data>ZONE</Data>
<Data>STATUS</Data>
</carrier>
<carrier>
<Data>AFRICA</Data>
<Data>ZAMBIA</Data>
<Data>MTN Zambia</Data>
<Data>GSM 900</Data>
<Data>2006-08-14</Data>
<Data>X</Data>
<Data>X</Data>
<Data>X</Data>
<Data>X</Data>
<Data>X</Data>
<Data>NA</Data>
<Data>0</Data>
</carrier>
...
它有更多的记录,我想更改标签,但不想一个接一个地做。使用这个dtd有办法用氧气吗?
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT coverturamundial (item+) >
<!ELEMENT item (continent, county, operator, frequency, signature, gsm, gprs, _3g, payment, sms, zone, status) >
<!ELEMENT continent (#PCDATA) >
<!ELEMENT county (#PCDATA) >
<!ELEMENT operator (#PCDATA) >
<!ELEMENT frequency (#PCDATA) >
<!ELEMENT signature (#PCDATA) >
<!ELEMENT gsm (#PCDATA) >
<!ELEMENT gprs (#PCDATA)>
<!ELEMENT _3g (#PCDATA) >
<!ELEMENT payment (#PCDATA) >
<!ELEMENT sms (#PCDATA) >
<!ELEMENT zone (#PCDATA) >
<!ELEMENT status (#PCDATA)>
事实上,数据来自xls。谢谢你的帮助。
答案 0 :(得分:2)
我认为在oXygen中没有自动化的方法。你可以做一个简单的XSLT转换。看起来总共有12个Data
元素对应于DTD中item
中的12个元素。如果是这样,您可以将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>
希望这有帮助。