使用 Jetty XML 解析器检索重复的元素

Retrieve duplicated element using Jetty XML Parser

我目前正在 JavaScript Nashorn 中使用 Jetty XML 解析器来检索 XML 有效负载中的某些节点,并且我想检索具有相同名称的某个子节点。例如:

<MessageV1 xmlns="http://schemas.somecompany.com.au/somemessage.xsd">
    <DeliverWeb>
       <DeliveryMethod>WebService1</DeliveryMethod>
       <DeliverToUrl>https://someurl.com/class/Webservices</DeliverToUrl>
       <DeliverToSomewhere>false</DeliverToSomewhere>
    </DeliverWeb>
    <DeliverWeb>
       <DeliveryMethod>WebService2</DeliveryMethod>
       <DeliverToUrl>https://login.salesforce.com/services/someid</DeliverToUrl>
       <DeliverToSomewhere>false</DeliverToSomewhere>
    </DeliverWeb>
 </MessageV1>

我的代码:

    //Convert XML input string to input stream
    var parser = new UsersXmlParser()
    var input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8"));

    //parse XML
    var inputMessage = parser.parse(input)

   //extract DeliverWeb using tag string
    var webservice1 = inputMessage.get("DeliverWeb")

   //extract DeliverWeb using i node (This will count the number of tag)
    var webservice1 = inputMessage.get(1)
    var webservice2 = inputMessage.get(3)

正如您在代码中看到的,如果我使用标记字符串,我将无法获得第二个 DeliverWeb,因为它只有 return 第一个子节点:

    <DeliverWeb>
       <DeliveryMethod>WebService1</DeliveryMethod>
       <DeliverToUrl>https://someurl.com/class/Webservices</DeliverToUrl>
       <DeliverToSomewhere>false</DeliverToSomewhere>
    </DeliverWeb>

有没有一种方法可以使用名称标签后跟子节点的编号来检索第二个 deliverweb,例如:

    var webservice1 = inputMessage.get("DeliverWeb")[1]

但是,这不会起作用 return:

<DeliveryMethod>WebService1</DeliveryMethod>

如果有帮助,这里是码头 XML 库 link: https://archive.eclipse.org/jetty/7.0.0.M3/apidocs/org/eclipse/jetty/xml/XmlParser.Node.html

如有任何想法,我们将不胜感激!

好吧,<XmlParser.Node>.get 的文档将其描述为 “获取带有标签的第一个子节点。”

如果你想得到所有的标签,有<XmlParser.Node>.iterator其中returns一个Iterator包含所有匹配的带有标签的子节点。

var webservices = inputMessage.iterator("DeliverWeb");

var webservice1 = webservices.next();
var webservice2 = webservices.next();