Code Monkey home page Code Monkey logo

Comments (9)

fefit avatar fefit commented on August 15, 2024 1

@lynnux 已经更新到 0.2.4 版本,修复了上述问题。如果标签名中包含冒号(:),点(.)等特殊字符,使用的时候选择器在特殊字符前加上反斜扛转义符,如 find("upd\\:Update"),这样就可以了。获取标签名统一改成大写了,使用选择器时会用大写去对比,所以选择器可以不用区分大小写。另外,现在获取属性的时候,属性名都会先转小写,然后和标签属性的小写名称进行对比,这样和浏览器一样,属性名获取值或者使用选择器都不区分大小写了。如果还有问题,可以重开issue,或有其它使用问题,欢迎反馈,感谢。

from visdom.

lynnux avatar lynnux commented on August 15, 2024

临时的解决办法是替换upd:为空就可以了。
还发个问题就是默认load选项好像很消耗内容,我这会用到上G内容,因为处理的xml文件很多,上千万,而修改默认选项后就少很多了,只要几百M:

let root = Vis::load_options(
                &text,
                visdom::html::ParseOptions {
                    auto_fix_unclosed_tag: false,
                    auto_fix_unexpected_endtag: false,
                    auto_fix_unescaped_lt: false,
                    allow_self_closing: false,
                    ..Default::default()
                },
            )?;

另外还有点,默认根据ParseOptions用find是不区分大小写的哈,但是get_attribute又好像是字符串直接比较,不知道需要改不?

from visdom.

fefit avatar fefit commented on August 15, 2024

你好,感谢反馈~
关于第一个问题,冒号『:』一般会被当成伪类选择器的开始标识符号,考虑到标签名带命名空间标识符的确在xml和一些库(比如react)中的确比较常见,这个问题我将更新版本修复一下,做法将参照jQuery,标签名中带冒号的需要将冒号用反斜杠『\』转义一下。
关于第二个问题,因为刚开始设计的时候是主要针对html的,html中标签名是大小写不敏感的,所以在tag_name方法上都默认使用了小写处理,但选择器里没有做处理,这样的确可能会带来选择器使用标签名大小写不统一的问题。这个地方我想还是和浏览器保持一致,统一改成大写比较好,同时选取标签名的时候也用大写来对比;属性名的逻辑也差不多,可能统一成小写来对比相对性能好一些。
至于使用 load_options 和默认 load 方法对比,load 方法会明显占用更多内存的问题,使用默认配置不会对遇到的这些错误情况做处理,如果html/xml中有对应的错误的时候应该会走到报错的部分;开启这些配置、解析的时候会需要做一些额外的判断和修复的处理,需要看下解析的html/xml是不是真的存在错误。这个我目前没有大量的测试,需要后面再多找些用例测测。

from visdom.

lynnux avatar lynnux commented on August 15, 2024

感谢大佬,效率真高啊!

from visdom.

lynnux avatar lynnux commented on August 15, 2024

图片
标签带点提示"wrong key character",唉,xml毕竟不是html,不知道能不能支持?

from visdom.

fefit avatar fefit commented on August 15, 2024

图片
标签带点提示"wrong key character",唉,xml毕竟不是html,不知道能不能支持?

能看到报错的字符是哪个吗?看错误应该是属性名解析出错了,如果不好找用0.2.6版本看下,统一了一下属性名的判断逻辑,错误加上了错误的字符,好排查问题一点。

from visdom.

lynnux avatar lynnux commented on August 15, 2024

@fefit 不好意思哈,我昨天以为是b.RegDword带点的问题,今天发现不是,这句可以测试出来r#"<b.RegDword Key="HKEY_LOCAL_MACHINE" Subkey="Software\Microsoft\Exchange\" Value="Server Language" />"#,运行结果:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ParseErr
or { region: CodeRegion { index: 195, line: 1, col: 98 }, kind: CommonError("wro
ng key character:\"") }', src\main.rs:15:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: xxx.exe` (exit code: 101)

应该是Subkey="Software\Microsoft\Exchange\" 末尾那个\"被当成转义了,换成r#"<b.RegDword Key="HKEY_LOCAL_MACHINE" Subkey="Software\Microsoft\Exchange" Value="Server Language" />"#就可以了

from visdom.

fefit avatar fefit commented on August 15, 2024

@lynnux 明白啦,在浏览器里也试了下,在属性值里反斜扛的确就是当成反斜扛本身这个字符处理了,没有转义的作用。这个问题我来修复一下。

from visdom.

fefit avatar fefit commented on August 15, 2024

@lynnux 已经新发了版本 0.2.7 修复了一下这个问题~ 如果还遇到其他问题,欢迎随时反馈了~

from visdom.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.