当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 怎么删除xml中指定的标签
帖子发表于 : 2012-12-23 15:51 

注册: 2009-03-25 13:17
帖子: 206
送出感谢: 1
接收感谢: 0 次
...<label name=1> blah <label name=2> blahblah </label> data <label name=3> blahaah </label> lalala </label>...

怎么移除掉 <label name=1> 以及与它相匹配的 </label> 标签,得到这个样子。

... blah <label name=2> blahblah </label> data <label name=3> blahaah </label> lalala ...


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-24 13:25 

注册: 2012-11-25 15:29
帖子: 48
系统: LTS 12.04
送出感谢: 3
接收感谢: 0 次
你可以直接编辑的啊,
NANO,VIM,EMACS都可以的


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-24 17:41 

注册: 2009-03-25 13:17
帖子: 206
送出感谢: 1
接收感谢: 0 次
attajob 写道:
你可以直接编辑的啊,
NANO,VIM,EMACS都可以的

100M的文件


_________________
生命诚可贵
不因虚度年华而悔恨
Dropbox: http://db.tt/zYrxtyj


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-24 22:40 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
你这钳套的。那只能xml的parse了。如果100M一个,那parse估计死机。
parse类非常耗资源的。


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-25 12:32 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
tagsoup过滤标签就是了
楼主给的示例是有歧义的,这个结束标签</label>应该是unique的吧

无论嵌套多少层,这个实现应该是常数内存占用的。
[haskell]

module Main where
import qualified Data.Text.Lazy.IO as T
import System.Environment
import Text.HTML.TagSoup
import System.Directory

main =
getArgs >>=
mapM_
(\fp ->
T.readFile fp >>=
T.writeFile (fp ++ ".tmp") . renderTags . filter isTag . parseTags >>
renameFile (fp ++ ".tmp") fp
)
where
isTag (TagOpen "yourlabel" _) = False
isTag (TagClose "yourlabel") = False
isTag _ = True


[/haskell]


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-25 18:24 

注册: 2007-12-05 10:57
帖子: 1003
地址: 金山
系统: ubuntu14.04
送出感谢: 13
接收感谢: 62
正则表达式的 平衡组
http://www.oschina.net/code/snippet_96699_714


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-25 20:41 
头像

注册: 2009-07-25 1:57
帖子: 701
送出感谢: 5
接收感谢: 13
之前没看清楚,符合楼主要求的是这个
[haskell]
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text.Lazy.IO as T
import System.Environment
import Text.HTML.TagSoup
import System.Directory
import Data.Monoid
import Data.Text.Lazy.Builder
import Data.Text.Lazy (Text)
main =
getArgs >>=
mapM_
(\fp ->
T.readFile fp >>=
T.writeFile (fp ++ ".tmp") . myfilter mempty [] . parseTags >>
renameFile (fp ++ ".tmp") fp
)


myfilter :: Builder -> [Bool] -> [Tag Text] -> Text
myfilter acc _ [] = toLazyText acc
myfilter acc stack (tag:tags) =
case tag of
TagOpen "label" ps -> if any (\(a,b) -> a == "name" && b == "1") ps
then myfilter acc (True:stack) tags
else myfilter (acc <> fromLazyText (renderTags [tag])) (False:stack) tags
TagClose "label"-> if head stack
then myfilter acc (tail stack) tags
else myfilter (acc <> fromLazyText (renderTags [tag])) (tail stack) tags
_ -> myfilter (acc <> fromLazyText (renderTags [tag])) stack tags

[/haskell]

楼主这个需求开tagsoup或者正则其实都没必要。反而影响速度和性能。

xml的<TAG>里不会有这种情况的 <TAG <TAG2>>所以只要自己手写个函数解析'<'和'>'围起来的部分即可。也就10来分钟工作量
TagOpen部分如果满足情况直接扔掉,然后压个布尔栈,检测到同样的TagClose时,检查栈顶元素决定是否扔这个TagClose。


_________________
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 怎么删除xml中指定的标签
帖子发表于 : 2012-12-28 15:54 

注册: 2009-05-29 22:05
帖子: 151
送出感谢: 0 次
接收感谢: 0 次
use XML::LibXML;

my $dom = XML::LibXML->load_xml(IO => \*DATA);
my $element = $dom->getElementsByTagName($node)->get_node(1);

$answer->parentNode->removeChild($element);
print $dom;

__DATA__
你的数据


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译