Comments (9)
@lynnux 已经更新到 0.2.4
版本,修复了上述问题。如果标签名中包含冒号(:),点(.)等特殊字符,使用的时候选择器在特殊字符前加上反斜扛转义符,如 find("upd\\:Update")
,这样就可以了。获取标签名统一改成大写了,使用选择器时会用大写去对比,所以选择器可以不用区分大小写。另外,现在获取属性的时候,属性名都会先转小写,然后和标签属性的小写名称进行对比,这样和浏览器一样,属性名获取值或者使用选择器都不区分大小写了。如果还有问题,可以重开issue,或有其它使用问题,欢迎反馈,感谢。
from visdom.
临时的解决办法是替换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.
你好,感谢反馈~
关于第一个问题,冒号『:』一般会被当成伪类选择器的开始标识符号,考虑到标签名带命名空间标识符的确在xml和一些库(比如react)中的确比较常见,这个问题我将更新版本修复一下,做法将参照jQuery,标签名中带冒号的需要将冒号用反斜杠『\』转义一下。
关于第二个问题,因为刚开始设计的时候是主要针对html的,html中标签名是大小写不敏感的,所以在tag_name方法上都默认使用了小写处理,但选择器里没有做处理,这样的确可能会带来选择器使用标签名大小写不统一的问题。这个地方我想还是和浏览器保持一致,统一改成大写比较好,同时选取标签名的时候也用大写来对比;属性名的逻辑也差不多,可能统一成小写来对比相对性能好一些。
至于使用 load_options 和默认 load 方法对比,load 方法会明显占用更多内存的问题,使用默认配置不会对遇到的这些错误情况做处理,如果html/xml中有对应的错误的时候应该会走到报错的部分;开启这些配置、解析的时候会需要做一些额外的判断和修复的处理,需要看下解析的html/xml是不是真的存在错误。这个我目前没有大量的测试,需要后面再多找些用例测测。
from visdom.
感谢大佬,效率真高啊!
from visdom.
标签带点提示"wrong key character",唉,xml毕竟不是html,不知道能不能支持?
from visdom.
能看到报错的字符是哪个吗?看错误应该是属性名解析出错了,如果不好找用0.2.6
版本看下,统一了一下属性名的判断逻辑,错误加上了错误的字符,好排查问题一点。
from visdom.
@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.
@lynnux 明白啦,在浏览器里也试了下,在属性值里反斜扛的确就是当成反斜扛本身这个字符处理了,没有转义的作用。这个问题我来修复一下。
from visdom.
@lynnux 已经新发了版本 0.2.7
修复了一下这个问题~ 如果还遇到其他问题,欢迎随时反馈了~
from visdom.
Related Issues (20)
- error: failed to get `mesdoc` as a dependency of package `visdom v0.1.4 HOT 1
- 内存泄漏 HOT 6
- 如何获取节点的tag name(节点名称)? HOT 3
- 将`Result<Elements, Box<dyn Error>>` 改为`Result<Elements, Box<dyn Error + Send>>` HOT 2
- 是否有更好的方式获取 select 元素的值? HOT 4
- Opposite of .has() HOT 4
- doc.find("p:contains('好用')" panicked, only when Chinese characters appear in contains() HOT 2
- How to remove a DOM element? HOT 6
- No problem, my bad :(
- Please add support for html method for all elements HOT 5
- Navigating sideway with `find` method HOT 2
- set_html and replace_with seems not work HOT 6
- 这么好的项目为什么这么少人知道? HOT 1
- 不可用 HOT 2
- `rphtml` and `htmlentities` APIs changed HOT 3
- Stripping class entirely HOT 2
- Does this support xpath selectors ? HOT 4
- 缺少类似jquery的clone HOT 6
- `Vis::load`返回的结果应该自动选中root元素 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from visdom.