2011-04-20 296 views
1

我与该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中获得的。谢谢你的帮助。

回答

2

我不认为有一个自动化的方式来在oXygen这样做。尽管如此,你可以做一个简单的XSLT转换。看起来像DTD中总有对应于item中的12个元素的12 Data元素。如果这是真的,您可以将Data元素转换为其位置。

下面是一个示例样式表(注:我在输出与系统标识符的DOCTYPE轻松验证氧气输出,你可以删除/更改此):

<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> 

如果你不想为data元素做个人xsl:template的,你可以这样做:

<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> 

希望这会有所帮助。

+0

非常感谢,你救了我的命!这是一个很好的例子,它工作正常。 – SakuraTrc 2011-04-25 18:43:27

+0

非常欢迎。我很高兴它帮助! – 2011-04-25 20:10:59