Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XPath:以不同方式定义的节点_Java_Xpath_Xstream - Fatal编程技术网

Java XPath:以不同方式定义的节点

Java XPath:以不同方式定义的节点,java,xpath,xstream,Java,Xpath,Xstream,我有一个XML文档,它是通过将对象树持久化为XML生成的。在此树中,特定类型的节点(对象)可以以不同的方式出现: 它们是从另一个对象引用的,用XML术语来说,这意味着它们是表示对象的节点的子节点。第一次出现这种情况时,节点具有id属性,并通过子节点进行原位序列化: 与第一种情况类似,节点可以从集合类型对象(映射、列表等)中引用,在这种情况下,将不会有类属性,但该值将是节点名称。将有一个id或reference属性: 43 0 伦敦 ... 我试图实现的是获得一个节点列表,该列表表示定义类型为

我有一个XML文档,它是通过将对象树持久化为XML生成的。在此树中,特定类型的节点(对象)可以以不同的方式出现:

  • 它们是从另一个对象引用的,用XML术语来说,这意味着它们是表示对象的节点的子节点。第一次出现这种情况时,节点具有
    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]