我有一个艰难的xpath查询(我不能完全确定可以做到)。
我有以下xml
<Root>
<PersonOne Name='jon'/>
<PersonTwo Name='bob'/>
<JonDetails>some text</JonDetails>
<BobDetails>some details about Bob</BobDetails>
</Root>
我知道这是一个人为的例子,但我正在处理的xml结构是固定的,我无法改变它。
基本上我正在试图找出xpath来为PersonOne节点中的name属性选择* Detail节点。
为此,我需要在PersonOne节点中使用常量Details连接'Name'的atribute值,以将'JonDetails'作为节点名称。
到目前为止我有这个但它不起作用,但我认为这是正确的。
/Root/*[contains(name(), concat(/Root/PersonOne/@Name, 'Details'))]
但是,为了增加乐趣,它必须是节点名称上不区分大小写的匹配。我知道这可以通过翻译功能完成。
指向正确方向的任何指针?
乔恩
答案 0 :(得分:2)
这个表达会更好吗?
/Root/*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = translate(concat(/Root/PersonOne/@Name, 'details'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')]
它寻找完全匹配。
答案 1 :(得分:0)
想出来了!它不是太漂亮但它有效。
/Root/*[contains(translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), translate(concat(/Root/PersonOne/@Name, 'details'), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'))]
如果有人能够改进这一点,那将会很高兴。
由于