Java XPath:以不同方式定义的节点
我有一个XML文档,它是通过将对象树持久化为XML生成的。在此树中,特定类型的节点(对象)可以以不同的方式出现:Java XPath:以不同方式定义的节点,java,xpath,xstream,Java,Xpath,Xstream,我有一个XML文档,它是通过将对象树持久化为XML生成的。在此树中,特定类型的节点(对象)可以以不同的方式出现: 它们是从另一个对象引用的,用XML术语来说,这意味着它们是表示对象的节点的子节点。第一次出现这种情况时,节点具有id属性,并通过子节点进行原位序列化: 与第一种情况类似,节点可以从集合类型对象(映射、列表等)中引用,在这种情况下,将不会有类属性,但该值将是节点名称。将有一个id或reference属性: 43 0 伦敦 ... 我试图实现的是获得一个节点列表,该列表表示定义类型为
id
属性,并通过子节点进行原位序列化:类
属性,但该值将是节点名称。将有一个id
或reference
属性:
43
0
伦敦
...
我试图实现的是获得一个节点列表,该列表表示定义类型为ch.sahits.game.openpatrician.model.city.impl.city
的对象的所有节点
到目前为止,我得到的是前两种情况下的XPath表达式:
/*[@class='ch.sahits.game.openpatrician.model.city.impl.city'和@id]
我要解决的是第二部分,它选择了所有具有id
属性的节点ch.sahits.game.openpatrician.model.city.impl.city
,并将其与上面的属性相结合
澄清:
给定一个
className
我需要找到所有具有所述className
类属性和id
属性的节点,或者所有具有id
属性的className
节点。XPath表达式由两个单独的表达式组成,它们与或组合在一起
第一部分来自问题本身,与案例1)匹配,不包括案例2):
第二部分选择并使用具有id属性的ch.sahits.game.openpatrician.model.city.impl.city
节点:
//ch.sahits.game.openpatrician.model.city.impl.City[@id]
将两者结合在一起:
//*[@class='ch.sahits.game.openpatrician.model.city.impl.City' and @id]
| //ch.sahits.game.openpatrician.model.city.impl.City[@id]
XPath表达式由两个单独的表达式组成,它们与或
组合在一起
第一部分来自问题本身,与案例1)匹配,不包括案例2):
第二部分选择并使用具有id属性的ch.sahits.game.openpatrician.model.city.impl.city
节点:
//ch.sahits.game.openpatrician.model.city.impl.City[@id]
将两者结合在一起:
//*[@class='ch.sahits.game.openpatrician.model.city.impl.City' and @id]
| //ch.sahits.game.openpatrician.model.city.impl.City[@id]
除非我遗漏了什么,否则问题中的xpath表达式只选择第一种情况(
元素)。您是否正在寻找一个可以选择所有三个元素的表达式(这一个加上
和
)?@JackFleeting稍微更新了这个问题。我需要案例1和案例3的表达式。请注意,第三种情况也可能有一个变体,其中有一个reference
属性而不是id
属性。除非我遗漏了什么,否则问题中的xpath表达式只选择第一种情况(
元素)。您是否正在寻找一个可以选择所有三个元素的表达式(这一个加上
和
)?@JackFleeting稍微更新了这个问题。我需要案例1和案例3的表达式。请注意,第三种情况也可能有一个变体,其中存在reference
属性而不是id
属性。
//ch.sahits.game.openpatrician.model.city.impl.City[@id]
//*[@class='ch.sahits.game.openpatrician.model.city.impl.City' and @id]
| //ch.sahits.game.openpatrician.model.city.impl.City[@id]