【问题标题】:Access XML Node with namespace in Groovy - XmlSlurper在 Groovy 中使用命名空间访问 XML 节点 - XmlSlurper
【发布时间】:2019-03-21 09:29:25
【问题描述】:

有一个如下所示的 xml,我正在尝试获取“TimeAccountDetail”的大小,但只得到一个 0 但期望为 2。不知道需要做什么?

xml:

<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
    <multimap:Message1>
        <TimeAccountDetail>
            <TimeAccountDetail>
                <TimeAccount_externalCode>614dbcc89cb843129b5c3be26dbd2a22</TimeAccount_externalCode>
                <bookingDate>2019-03-21T07:38:31</bookingDate>
                <bookingType>ADJUSTMENT</bookingType>
                <comment>This is my test1</comment>
                <employeeTime>null</employeeTime>
                <externalCode>MyTimeAccountDetail</externalCode>
                <referenceObject>null</referenceObject>
            </TimeAccountDetail>
        </TimeAccountDetail>
        <TimeAccountDetail>
            <TimeAccountDetail>
                <TimeAccount_externalCode>614dbcc89cb843129b5c3be26dbd2a22</TimeAccount_externalCode>
                <bookingDate>2019-03-21T07:38:31</bookingDate>
                <bookingType>ADJUSTMENT</bookingType>
                <comment>This is my test2</comment>
                <employeeTime>null</employeeTime>
                <externalCode>MyTimeAccountDetail</externalCode>
                <referenceObject>null</referenceObject>
            </TimeAccountDetail>
        </TimeAccountDetail>
    </multimap:Message1>
</multimap:Messages>

时髦的:

def ns = new Namespace('xmlns:http://sap.com/xi/XI/SplitAndMerge', 'multimap')
def slurper = new XmlSlurper(false,true)
def payload = slurper.parse(new File("C:/Users/me/Documents/finalXML.xml"))
def payloadSize = payload.TimeAccountDetail.size()
println "size is ${payloadSize}"

【问题讨论】:

    标签: groovy


    【解决方案1】:

    您只需在代码中更改这一行:

    def payloadSize = payload.Message1.TimeAccountDetail.size()
    

    因为TimeAccountDetail 位于Message1 内部

    如果你想进行命名空间感知节点查找:

    def slurper = new XmlSlurper(false,true)
    def payload = slurper.parseText(xml).declareNamespace(x:'http://sap.com/xi/XI/SplitAndMerge')
    def payloadSize = payload.'x:Message1'.TimeAccountDetail.size()
    println "size is ${payloadSize}"
    

    【讨论】:

    • 谢谢!这不是我访问元素值的相同方式吗? ` def String build_time=payload.Message1[0].TimeAccountDetail[i-1].bookingDate println "Date is ${build_time}" ` 有什么帮助吗?干杯!
    • 请注意,您有两个嵌套元素 TimeAccountDetail。所以访问器应该是这样的:payload.Message1[0].TimeAccountDetail[1].TimeAccountDetail.bookingDate
    • 顺便说一句,要迭代你可以使用each的元素:payload.Message1[0].TimeAccountDetail.each{ta-&gt; println ta.TimeAccountDetail.bookingDate}
    • 谢谢大家!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多