以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  DOM生成XML时关于GB2312的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=12834)


--  作者:asapple
--  发布时间:12/16/2004 10:07:00 PM

--  DOM生成XML时关于GB2312的问题
我使用DOM生成一个XML,但是DOM会自动在XML生成时设置文件为
<?xml  version="1.0" encoding="UTF-8" ?>;可是我需要的是<?xml  version="1.0" encoding="GB2312" ?>但是我不知道在什么地方可以修改,这个问题如何解决啊,我生成XML时使用的是TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);

transformer.transform(source, result);
这种方法,求大侠帮忙啊!!!小弟在线等了


--  作者:wxb_nudt
--  发布时间:12/17/2004 9:03:00 PM

--  
反正你在用java,顺便把文件读进来把第一行换掉就行了,哈哈!

--  作者:布克
--  发布时间:12/18/2004 12:03:00 AM

--  
我写了个xsl,对源xml文档用此xsl进行变换,可获得目标xml,只是encoding 不同了。
我没有对此 xsl 进行严格的验证,试过几个文件,还可以。你可以循此思路去做。如有错误,请告诉我。

如要改变目标文档的encoding, 请修改 xsl:output 的 encoding 属性即可

======================================
<?xml version="1.0" encoding="UTF-8"?>
<!-- DataAnyWhere Tools 2004-12-17 23:40:57 -->
<!-- DataAnyWhere Tools Version 2.6 -->
<!-- Shenzhen Cathay information technology Co., Ltd http://www.szhzz.com -->
<?xml-stylesheet type="text/xsl"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt">
 <xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="no" encoding="gb2312"/>
  <xsl:template match="/">
   <xsl:apply-templates />
  </xsl:template>
  <!-- Copy text, comments and PIs -->
  <xsl:template match="comment() | processing-instruction() | text()">
   <xsl:copy>
    <xsl:apply-templates />
   </xsl:copy>
  </xsl:template>
  <xsl:template match="*">
   <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
  </xsl:template>
  
</xsl:stylesheet>


--  作者:wxb_nudt
--  发布时间:12/18/2004 11:26:00 PM

--  
原来可以修改 xsl:output 的 encoding 属性啊?
我不熟,我还是新手。。。。。。。。。汗一个!
--  作者:tider
--  发布时间:1/5/2005 4:05:00 PM

--  
在你的writeXMl方法中这样写:
FileOutputStream FOS = new FileOutputStream("生成的XML文件名称");
OutputStreamWriter writer = new OutputStreamWriter(FOS);
    ((XmlDocument)doc).write(writer,"UTF-8");

第二个参数就是你要控制的字符集.


--  作者:笨鸟先飞168
--  发布时间:3/10/2005 10:29:00 AM

--  
请问asapple先生,你的程序中用了transformer什么的,是因为你在做关于电力系统方面的工作吗?如果是就好了,有好多问题想向你讨教,先谢了!请回复:)
--  作者:xfxy
--  发布时间:4/4/2005 2:59:00 PM

--  
用createProcessingInstruction('XML','version="1.0" encoding="gb2312"')
--  作者:baofeng0722
--  发布时间:4/5/2005 10:58:00 AM

--  
楼上的方法不能修改,只能重新再生成一次
生成如下的:
<?xml  version="1.0" encoding="UTF-8" ?>
<?xml  version="1.0" encoding="GB2312" ?>
怎么改我也在研究,我查到DOM Level 3的Document接口中加入了四个属性:version(String),standalone(boolean),encoding(String)和actualEncoding(String)。

public String getVersion();
public void setVersion(String version);

public boolean getStandalone();
public void setStandalone(boolean standalone);

public String getEncoding();
public void setEncoding(String encoding);

public String getActualEncoding();
public void setActualEncoding (String actualEncoding);

但我在Jbuilder中试过了,document中没找到如上的类


--  作者:baofeng0722
--  发布时间:4/7/2005 11:52:00 AM

--  
import org.apache.xml.serialize.*;

     // Find the implementation
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     DocumentBuilder builder = factory.newDocumentBuilder();
     DOMImplementation domImpl=builder.getDOMImplementation();
     //create document
     Document document=domImpl.createDocument(null,"DataList",null);
     Element root=document.getDocumentElement();
    //以下代码你可以添加元素


   //生成OutputFormat
    OutputFormat opf=new OutputFormat(document);
    opf.setOmitXMLDeclaration(false);
    opf.setStandalone(true);
    opf.setEncoding("UTF-8");//改成gb2312就行了
    opf.setVersion("1.0");
    opf.setMediaType("application/xml");
    File myXML = new File("d:/张悦/arrayxml/"+filename+".xml");
    FileOutputStream os = new FileOutputStream(myXML);
    XMLSerializer serializer=new XMLSerializer(os,opf);
    serializer.serialize(document);



--  作者:zyren06
--  发布时间:4/11/2005 9:47:00 AM

--  
我用的是tider提到的方法!
--  作者:xbfan
--  发布时间:4/17/2005 3:00:00 PM

--  
我用的是“baofeng0722”楼上的方法
--  作者:shirlywq
--  发布时间:4/20/2005 1:31:00 PM

--  
以下是引用tider在2005-1-5 16:05:54的发言:
在你的writeXMl方法中这样写:
FileOutputStream FOS = new FileOutputStream("生成的XML文件名称");
OutputStreamWriter writer = new OutputStreamWriter(FOS);
     ((XmlDocument)doc).write(writer,"UTF-8");

第二个参数就是你要控制的字符集.



用的这个方法,可以解决问题了,多谢~~

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
50.781ms