我有一段像这样的XML:
<root>
<foo src=""/>
<foo src="bar"/>
<foo />
</root>
Run Code Online (Sandbox Code Playgroud)
我想知道哪些元素具有src属性,这些属性为空且具有值.
我来的最远的是
$ xmlstarlet sel -t -m '//foo' -v @src -n foo.xml
bar
Run Code Online (Sandbox Code Playgroud)
虽然这并没有告诉我第三个foo缺少属性.
Jea*_*ett 31
这将选择没有src属性的foos .
/root/foo[not(@src)]
Run Code Online (Sandbox Code Playgroud)
对于其他两个任务,我会使用@TOUDIdel和@Dimitre Novatchev指出的表达式的混合:
/root/foo[@src and string-length(@src)=0]for foos with empty src,/root/foo[@src and string-length(@src)!=0]for foos with srcwith content in it.
顺便说一句,我会避免使用"随处"选择器//(更不用说*通配符),除非你确定这是你需要的.//就像让你非常渴望的狗嗅一块布告诉它一样,"带给我一切闻起来像这样的东西,无论你在哪里找到它".你不会相信它可以决定带回来的怪异废话.
小智 15
我想知道哪些元素具有src属性,这些属性为空且具有值.
@src属性为空的元素(无字符串值):
//*[@src[not(string())]]
Run Code Online (Sandbox Code Playgroud)
具有@src值(字符串值)的属性的元素:
//*[string(@src)]
Run Code Online (Sandbox Code Playgroud)
来自http://www.w3.org/TR/xpath/#section-String-Functions
通过返回文档顺序中第一个节点集中节点的字符串值,将节点集转换为字符串.如果节点集为空,则返回空字符串.
来自http://www.w3.org/TR/xpath/#function-boolean
当且仅当其长度不为零时,字符串才为真.
/root/foo[string-length(@src)!=0]返回所有foo元素具有非空值。
不幸的是,/root/foo[string-length(@src)=0]指示没有src属性的元素,也有src属性但为空的元素。
用途:
//*[@src and not(string-length(@src))]
Run Code Online (Sandbox Code Playgroud)
这将选择XML文档中具有src属性的字符串值长度为零的所有元素。
//*[@src and string-length(@src)]
Run Code Online (Sandbox Code Playgroud)
这将选择XML文档中具有src属性的字符串值长度不为零的所有元素。
//*[@src and string-length(normalize-space(@src))]
Run Code Online (Sandbox Code Playgroud)
这将选择XML文档中具有src属性的所有元素,该属性的属性在排除开始和结束空格后的字符串值的长度不为零。
//[not(@src)]
Run Code Online (Sandbox Code Playgroud)
这将选择XML文档中所有没有src属性的元素。
| 归档时间: |
|
| 查看次数: |
25812 次 |
| 最近记录: |