标签: gpath

如何在GPath中按属性值查找元素?

//div[@id='foo']在GPath中,这个XPath的替代方法是什么?一般来说,我可以在哪里找到这份文件?

java groovy xpath gpath

20
推荐指数
2
解决办法
2万
查看次数

Groovy JSON/GPath查询

鉴于以下JSON,我想提取postal_code(long_name或short_name).我已经使用JsonSlurper将其摄取到变量中并使用find/contains/etc尝试了各种查询.抓住在"类型"中有"postal_code"但仍无法解决的节点.任何帮助是极大的赞赏.

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Jefferson Ave",
               "short_name" : "Jefferson Ave",
               "types" : [ "route" ]
            },
            {
               "long_name" : "North Newport News",
               "short_name" : "North Newport News",
               "types" : [ "neighborhood", "political" ]
            },
            {
               "long_name" : "Newport News",
               "short_name" : "Newport News",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Virginia",
               "short_name" : "VA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US", …
Run Code Online (Sandbox Code Playgroud)

groovy json gpath

7
推荐指数
1
解决办法
1万
查看次数

如何使用Groovy的XMLSlurper和GPathResult从节点中删除属性?

我需要从一些已解析的HTML(转换为XML)中的body节点中删除属性.

xml groovy xmlslurper gpath

6
推荐指数
1
解决办法
3742
查看次数

使用 GPath 深度遍历字符串中带有点的 Groovy 对象的方法

我遇到的情况是,我正在使用字符串查询 MongoDB,以查找对象层次结构中超过一级深度的字段。此查询必须是字符串。例如,我在 Groovy 中查询类似的内容:

def queryField = 'a.b.c'  //this is variable and can be different every time
def result = mongodb.collection.findOne([queryField:5])
Run Code Online (Sandbox Code Playgroud)

问题不会出现,在结果中我想找到嵌套字段的值。有了 GPath,我可以深入一层并获得 a 的值

def aObj = result."a"  //or result["a"]
Run Code Online (Sandbox Code Playgroud)

然而,我想通过做这样的事情来更深入:

def queryField = "a.b.c"       //this can change every time and is not always 'a.b.c'
def cObj = result[queryField]  //since field is variable, can't just assume result.a.b.c
Run Code Online (Sandbox Code Playgroud)

目前这在 Groovy 中不起作用。这里记录了一个错误,但我想知道是否有更好的解决方法可以用于这种情况,它比我通过在点上拆分来解析字符串然后构建对象遍历要干净一些。请注意,“abc”在运行时是可变且未知的(例如,它可能是“abd”)。

grails groovy mongodb gpath

6
推荐指数
1
解决办法
2762
查看次数

GPathResult ..存在或不存在节点

我的GPathResult可以使用3种方式之一的名称节点

1)名称节点存在并且具有值ex:John

2)名称节点存在,但没有值.

3)根本没有名称节点.

在Groovy代码中,我如何使用我的Gpathresult区分上述3个案例.我是否使用像gPathResult这样的东西.value()!= null?

Pesudo代码:

if(name node is present and has a value){
do this
}

if(name node exists, but has no value in it){
do this
}

if( No name node exists at all){
do this
}
Run Code Online (Sandbox Code Playgroud)

java xml groovy xpath gpath

6
推荐指数
1
解决办法
2043
查看次数

没有XML声明的GPathResult到String

我正在GPathResult转向String使用

def gPathResult = new XmlSlurper().parseText('<node/>')
XmlUtil.serialize(gPathResult)
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我在XML前面得到XML声明

<?xml version="1.0" encoding="UTF-8"?><node/>
Run Code Online (Sandbox Code Playgroud)

如何在一开始GPathResultString没有转换<?xml version="1.0" encoding="UTF-8"?>

xml groovy gpath

5
推荐指数
1
解决办法
3236
查看次数

我需要一个GPath查询来使用数字索引选择一个节点

如何从已解析的html文档中选择给定其索引的特定元素.

例如: ...

<div>div1</div>
<div>div2</div>
Run Code Online (Sandbox Code Playgroud)

我想选择第二个,div但在我看来GPath不提供像Xpath那样的解决方案.

groovy xml-parsing gpath

4
推荐指数
1
解决办法
914
查看次数

如何使用 GPathResult 获取下一个兄弟

如何获得 GPathResult 的下一个兄弟?例如,我有以下代码:

def priorityIssue = xmlReport.'**'.find { Issue ->
   Issue.Priority.text() == priority
}
Run Code Online (Sandbox Code Playgroud)

我如何获得 priorityIssue 的下一个兄弟姐妹?

谢谢!

xml groovy xmlslurper gpath

4
推荐指数
1
解决办法
1373
查看次数

用于按名称查找所有属性值的 GPath 表达式

查找 GPath 表达式以使用属性名称获取属性值列表:

def xmltxt = """<reports>
    <report category="weather">sunny</report>
    <report category="sports">golf</report>
    <report category="business">
      <subreport category="deals">wallstreet</subreport>
    </report>
    <report>NA</report>
    <report category="life">gossip</report>
 </reports>"""
Run Code Online (Sandbox Code Playgroud)

..当搜索所有category属性时,我想找回它,无论category属性存在于文档中的位置:

[weather, sports, business, deals, life]

...但是我所有的尝试检索的内容都超出了我想要的内容,似乎它返回的节点没有category属性;我可以从列表中删除空元素,但我想知道为什么会发生这种情况。

[, weather, sports, business, deals, , life]

  def names = xml.'**'.findAll{
     it.@category        
  }.collect{
     it.@category
  }
Run Code Online (Sandbox Code Playgroud)

groovy xpath gpath

3
推荐指数
1
解决办法
2032
查看次数

使用Groovy(gpath)获取XML属性的值

在groovy中使用XmlParser().请参阅以下代码.当name的值是type时,我需要打印answer的值.

   <root>
        <foo name = 'type' answer  = 'car'/>
        <foo name = 'color' answer = 'red'/>
        <foo name = 'size' answer = 'big'/>
    </root>
Run Code Online (Sandbox Code Playgroud)

我需要做这样的事情:

def XML = new XmlParser().parseText(XMLstring)
println XML.root.foo.[where  @name = 'type'].@answer
Run Code Online (Sandbox Code Playgroud)

xml groovy gpath

2
推荐指数
1
解决办法
1万
查看次数

Groovy 使用 GPath Slurper 获取 XML 属性的值

需要解析包含标头上下文中的属性的 XML 文档。

<?xml version="1.0" encoding="UTF-8"?>
<S38:manageRequest xmlns:S38="http://ns.com/S38" xmlns:header="http://ns.com/header/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ns.com/xsd/ManageItem XSD\ManageItem.xsd">
    <header:standardHeader>
        <header:serviceAddressing>
            <header:to>
                <header:address>http://ns.com/BLAHBLAH</header:address>
                <header:contextItemList>
                    <header:contextItem contextName="Channel" contextId="http://ns.com/contextItem">I Need This</header:contextItem>
                    <header:contextItem contextName="Box" contextId="http://ns.com/contextItem">Blue</header:contextItem>
                </header:contextItemList>
            </header:to>
        </header:serviceAddressing>
    </header:standardHeader>
</S38:manageRequest>
Run Code Online (Sandbox Code Playgroud)

我想使用 获取“我需要这个”的属性“频道”值groovy.util.slurpersupport.GPathResult

我找到了一种可行的方法,但我不相信它是正确的,因为我正在选择contextItem,幸运的是第一个是我感兴趣的:

private Map parseServiceAddressing(GPathResult message,Map values){ 
def serviceAddressingList=message."standardHeader"."serviceAddressing"."to"."contextItemList";
    if(serviceAddressingList.isEmpty()){ 
    throw new sourceException("serviceAddressing list is missing",values);
}

def contextItem=serviceAddressingList.'*'.find{
    it.name()=='contextItem'
    };

values.put(tag.CHANNEL, contextItem);

return values;
Run Code Online (Sandbox Code Playgroud)

所有用作Channel位置文本的尝试都无法检索到值。不幸的是,我必须使用 GPath,因为它是一个非常大的 Groovy 脚本的一部分,我被要求修改它,它可以做很多其他的事情。

有人可以告诉我实现这一目标的正确方法是什么吗?

xml groovy xmlslurper gpath

0
推荐指数
1
解决办法
1098
查看次数

标签 统计

gpath ×11

groovy ×11

xml ×6

xmlslurper ×3

xpath ×3

java ×2

grails ×1

json ×1

mongodb ×1

xml-parsing ×1