萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 1881|回复: 7

关于xml的域名解析,自己想了一个笨办法,求教有没有更好的想法,愿付酬劳

[复制链接]
发表于 2008-5-19 17:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
例子:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
    xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery"
    xmlns:wsdp="http://schemas.xmlsoap.org/ws/2006/02/devprof">
<soap:Header>
    <wsa:To>
        urn:schemas-xmlsoap-org:ws:2005:04:discovery
    </wsa:To>
    <wsa:Action>
        http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe
    </wsa:Action>
    <wsa:MessageID>
        urn:uuid:29cf10da-5c41-4d55-b184-5ee15e38ce23
    </wsa:MessageID>
</soap:Header>
<soap:Body>
    <wsd:Probe>
        <wsd:Types>wsdp:Device</wsd:Types>
    </wsd:Probe>
</soap:Body>

1.找到字符串http://schemas.xmlsoap.org/ws/2006/02/devprof所在位置
2.假定字符串起始位置为mIndex,则减去2(去掉="),然后读取在此之前的字符,直到xmlns:的:,反转字符位置,存在Array里面,这个就是xml的域名之一
3.同理读取http://www.w3.org/2003/05/soap-envelope等,获得其他域名
4.根据XML定义,我们知道元素Header前的域名和http://www.w3.org/2003/05/soap-envelope关联,所以读取:Header>前的字符,并和前面获得的域名比较
5.同理检测其他元素前的域名,完成域名解析

缺点:太繁琐,而且一旦其他元素不使用<xxx:元素名>的方式,则无法解析

求教高手是否有其他方式解析检查域名,前提是不能使用xml parser,因为传感器存储空间太小(36kb),如有其他好方法我愿付酬
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-5-19 17:43 | 显示全部楼层
你的格式是固定的,还是可变的?如果是特定格式,可以做到。可以用正规表达式解析么?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-5-19 19:15 | 显示全部楼层
原帖由 ourgame 于 2008-5-19 18:43 发表
你的格式是固定的,还是可变的?如果是特定格式,可以做到。可以用正规表达式解析么?


你指什么格式?namespace都是可变的 
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-5-19 22:19 | 显示全部楼层
可以用正则表达式,比如这样的:
  1. [a-zA-z]+://[^\s]*
复制代码
或者把冒号前面的固定成http
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-5-19 22:27 | 显示全部楼层
原帖由 drach 于 2008-5-19 20:15 发表


你指什么格式?namespace都是可变的 

我的意思就是

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope
    xmlns:soap="some_where"
    xmlns:wsa="some_where"
    xmlns:wsd="some_where"
    xmlns:wsdp="some_where">
<soap:Header>
    <wsa:To>some_thing</wsa:To>
    <wsa:Action>some_where</wsa:Action>
    <wsa:MessageID>some_thing</wsa:MessageID>
</soap:Header>
<soap:Body>
    <wsdrobe>
        <wsd:Types>wsdpevice</wsd:Types>
    </wsdrobe>
</soap:Body>

如果大致格式是这样固定的,那么你手动解析没什么问题。
如果你的文件内容,不是固定的,这种解析方法就不行了。
网上我看见一个ezxml,你去搜索试试看,或者再搜索 c tiny xml parser,总有人遇到和你一样的问题的。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-5-20 17:07 | 显示全部楼层
原帖由 ourgame 于 2008-5-19 23:27 发表

我的意思就是




    some_thing
    some_where
    some_thing


   
        wsdpevice
   


如果大致格式是这样固定的,那么你手动解析没什么问题。
如果你的文件内容,不是固定的,这种解 ...


谢谢,ezxml是用dom来进行parser,所以很占用内存,我找找其他的看看
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2008-5-26 11:57 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2008-5-26 16:16 | 显示全部楼层
找到就好。自己写实在很累。而且不一定可以写的好。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+1, 2024-11-16 02:49 , Processed in 0.066088 second(s), 18 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表