作者:Vivian329306 | 来源:互联网 | 2023-05-19 00:33
调用microsoft.xmldom生成xml文档
生成的文档如何实现换行
如:
文档
B
想达到
B
(当然最好在第二行前能加空格或tab等)
谢谢
不管问题是否解决明天一定结账(要是问题没解决,U P者有分)
谢谢
原贴子http://www.csdn.net/expert/topic/555/555491.xml
27 个解决方案
原贴子部分内容:
...............
...............
回复人: TXZY(木下藤吉郎) ( ) 信誉:100 2002-3-5 11:21:42 得分:0
我也不知道怎么解决。给你一份M$ 的XML SDK 4.0的例句,你可以参考一下。
Dim rdr As New MSXML2.SAXXMLReader40
Dim cnth As IVBSAXContentHandler
Dim wrt As New MXXMLWriter40
wrt.indent = True '好像要设置这个。
wrt.standalone = True
Set cnth = wrt
Set rdr.contentHandler = cnth
rdr.parseURL ("books.xml")
MsgBox wrt.output
Top
回复人: rjcludy() ( ) 信誉:100 2002-3-5 11:25:46 得分:0
先谢谢你 TXZY(木下藤吉郎)
我是用pb来调用microsoft.xmldom控件
我试试看能不能在pb中使用
回复人: rjcludy() ( ) 信誉:100 2002-3-5 11:28:34 得分:0
那个是调用sax接口
我想在xmldom中实现,有没有办法?
谢谢
回复人: mmkk() ( ) 信誉:100 2002-3-5 12:33:02 得分:0
这个以前没有认真考虑过...关注一下
回复人: TXZY(木下藤吉郎) ( ) 信誉:100 2002-3-5 13:48:40 得分:0
vb程序行!
Dim xmlDoc As New MSXML2.DOMDocument40
xmlDoc.async = False
xmlDoc.preserveWhiteSpace = True '禁止空格允许
xmlDoc.Load ("c:\11.xml")
MsgBox xmlDoc.xml
xmlDoc.save "c:\t1.xml"
xmlDoc.async = False
xmlDoc.preserveWhiteSpace = False '禁止空格不允许
xmlDoc.Load ("c:\11.xml")
MsgBox xmlDoc.xml
xmlDoc.save "c:\t2.xml"
程序的执行的结果,t1.xml没有任何缩进!t2.xml有一定缩进!但也不完美!
当11.xml为
< ?xml version="1.0" encoding='GB2312'?>
< hello> < to> Hello,the world!< /to> < yes> No< /yes> < ok> No Ok< /ok> < /hello>
各元素之间有空格!生成t2.xml就很完美。
各元素之间没有空格!生成t2.xml就和t1.xml差不多!
回复人: rjcludy() ( ) 信誉:100 2002-3-5 14:11:30 得分:0
再次谢谢你 TXZY(木下藤吉郎)
xmlDoc.preserveWhiteSpace = True是为了解析时不要突略空格
所以要实现换行等,必须原来就有一个有换行的文档
而我要的效果是,完全新生成一份xml文档,而不是载入文档修改再保存
thx again
...................
.....................
回去之前又发现个问题:
字符串 abcd(年度为:1998)
生成xml文档时正确
把生成的xml文档重新载入,取值只得到abcd
这是为什么???
我已经加了
是调用microsoft.xmldom对象
you need to use a different writer like what TXZY(木下藤吉郎) suggested, or use a XSLT identity tranformation to format your XML with
没有看懂你的新问题!
字符串是“abcd(年度为:1998)”一起吧!
你的字符串是否有空格呢?
xmlDoc.preserveWhiteSpace = True '禁止空格允许
先谢谢大家
TO TXZY(木下藤吉郎)
字符串是“abcd(年度为:1998)”是在一起的
调试发现有时取到的是“abcdf” 有时取到的是“abcd"”
另外测试也出现问题
XML文件内容如下:
演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据第986条演示
数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据演示数据
通过DOM解析后取的值
第一个只取了前24个字(原来48个)
第二个字取了"演示数据第986条演示数据演示数据演示数据演示数"
难道微软的DOM这么烂
(前天才开始学xml,因为项目比较紧,请大家多多帮忙,谢谢)
你用的是PB,是否设置了取值后放入变量的宽度呢?
如果用vb,我还没有遇到过这种情况了!
宽度肯定没有问题
是不是中的encoding设置有问题?
还是要设置dom对象的那个属性?
thx
没有问题,我做了一个简单程序,直接取你的数据,取出来都是正常的。48个,没有减少的情况。我也没有设置什么其他的属性,我估计和你pb有关系,你不会使用了left(xxx,48),在pb里面会不会认为是leftB(xxx,48)呢?
它是不是认为24个汉字,就占了48个英文字符空间。
vb里面有leftB()函数哈。
我估计和英文字符和汉字字符在PB里的设置有关!
谢谢你TXZY(木下藤吉郎)
pb对双字节的汉字是会处理出错(pb8不会),当我只是做简单的附值,
只是把节点的text附给pb的一个变量,这个可以肯定不会出错。
我猜内嵌的对象dom解析时,填充节点树枝时,对一些字符比较敏感,
也可能对双字节的汉字处理有问题。
幸好是生成xml文件时不会错,要不就完了
现在我对生成的xml文件换行和空格的处理是:
生成xml文件后,用个函数来打开文件添加必要的换行和空格,
效果不错
不知道兄弟您是如何处理的
不好意思,好像还有问题!没有空格还是不行!
笨方法如下:
首先xmlDoc也是一个DOMDocument对象,它的数据内容又你的程序添加进去!
然后在做一个函数或过程,调用另外一个DOMDocument对象,例如下面的SaveSpaceXml。进行转存!
转存VB程序
Dim SaveSpaceXml As New MSXML2.DOMDocument40
SaveSpaceXml.preserveWhiteSpace = False
SaveSpaceXml.loadXML xmlDoc.xml
'就是这里,用SavaSpaceXml对象的loadXML方法,装载xmlDoc对象的xml属性。
SaveSpaceXml.save "c:\t1.xml"
我又改进了我的转存 VB 程序,如下:
Dim SaveSpaceXml As New MSXML2.DOMDocument40
SaveSpaceXml.preserveWhiteSpace = False
SaveSpaceXml.loadXML Replace(xmlDoc.xml, ">", "> ")
SaveSpaceXml.save ("c:\t1.xml")
注意我调用了 vb 的一个函数,自动插入空格。然后就ok了!
Vb 里的 Replace函数介绍!
返回字符串,其中指定数目的某子字符串被替换为另一个子字符串。
Replace(expression, find, replacewith[, compare[, count[, start]]])
Replace 函数的语法有以下参数:
expression 必选。 字符串表达式 包含要替代的子字符串。
find 必选。被搜索的子字符串。
replacewith 必选。用于替换的子字符串。
start 可选。expression 中开始搜索子字符串的位置。如果省略,默认值为 1。在和count 关联时必须用
count 可选。执行子字符串替换的数目。如果省略,默认值为 -1,表示进行所有可能的替换。在和 start 关联时必须用。
compare 可选。指示在计算子字符串时使用的比较类型的数值。有关数值,请参阅“设置”部分。如果省略,缺省值为 0 ,这意味着必须进行二进制比较。
设置
compare 参数可以有以下值:
vbBinaryCompare 0 执行二进制比较。
vbTextCompare 1 执行文本比较。
用其他手段。我实验过了,绝对可以。
<%
set xmlobj=server.createobject("Microsoft.xmldom")
xmlobj.load(server.MapPath(".")&"\test.xml")
theStr=xmlobj.xml
theAry=split(theStr,"><")
theStr=join(theAry,"> "&chr(13)&"<")
xmlobj.loadxml(theStr)
xmlobj.save(server.MapPath(".")&"\test1.xml")
set xmlobj=nothing
%>
呵呵
这个分可以给我吗?
对了。在装载前后最好都加上一个错误判断,以防止出错。
:)
谢谢大家,空格的问题搞定了
不过那个解析后的不到原来的值,不知道有没有办法?
thx very much
先买单我再开一贴子
http://www.csdn.net/expert/topic/558/558229.xml
请大家继续关注
谢谢大家
用text属性就可以嘛?
我认为你应该从PB那边去考虑了,因为Dom在VB里面取值是正常的!
而PB我就不太熟悉了,估计没有办法帮助你!
你试一下中文编码
encoding="gb2312"
改为
encoding="EUC-CN"
看看!
我就是用text属性
我打开xml文档时
domxml.load(file)后
domxml.xml是正确的
再取它的子节点时发现子节点的xml属性就变了
text也不正确
我是直接把xml和text属性打印出来的,跟pb应该没有大关系了
得自己加标志表示换行,自己在把标志换成换行;
xml本身只存放数据,不会有格式。它的目标就是数据和操作、格式分离。