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

Groovy使用GPath Slurper获取XML属性的值,xml,groovy,xmlslurper,gpath,Xml,Groovy,Xmlslurper,Gpath,需要解析包含标题上下文中属性的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/Man

需要解析包含标题上下文中属性的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>
当位置文本检索不到值时,所有使用
频道的尝试都会失败。不幸的是,我不得不使用GPath,因为它是一个非常大的Groovy脚本的一部分,我被要求修改这个脚本,它还做了很多其他的事情


有人能告诉我实现这一点的正确方法吗?

您应该使用元素名称和元素属性找到它,它与请求值匹配,如下所示:

def xmlString = """<?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>"""


def xml = new XmlSlurper().parseText(xmlString)
def cItemChannel = xml.'**'.find {it.name() == 'contextItem' && it.@contextName == 'Channel'}?.text()
println cItemChannel
def xmlString=”“”
http://ns.com/BLAHBLAH
我需要这个
蓝色
"""
def xml=new XmlSlurper().parseText(xmlString)
def cItemChannel=xml.'**'。查找{it.name()=='contextItem'&&it.@contextName=='Channel'}?.text()
打印城市频道

您可以在线快速尝试它

您应该使用元素名称找到它,并且元素属性与请求值匹配,如下所示:

def xmlString = """<?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>"""


def xml = new XmlSlurper().parseText(xmlString)
def cItemChannel = xml.'**'.find {it.name() == 'contextItem' && it.@contextName == 'Channel'}?.text()
println cItemChannel
def xmlString=”“”
http://ns.com/BLAHBLAH
我需要这个
蓝色
"""
def xml=new XmlSlurper().parseText(xmlString)
def cItemChannel=xml.'**'。查找{it.name()=='contextItem'&&it.@contextName=='Channel'}?.text()
打印城市频道

你可以在网上快速试用

这是一种很棒的享受,我知道会有办法确保我得到正确的价值。谢谢你的帮助@Plasma,很高兴它起到了作用。这是一种很棒的享受,我知道会有办法确保我得到正确的价值。谢谢你的帮助@Plasma,很高兴它有帮助。