【问题标题】:Retrieve duplicated element using Jetty XML Parser使用 Jetty XML Parser 检索重复的元素
【发布时间】:2022-01-27 00:22:07
【问题描述】:

我目前在 JavaScript Nashorn 中使用 Jetty XML Parser 来检索 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,因为它只返回第一个子节点:

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

有没有一种方法可以使用名称标签以及子节点的编号来检索第二个交付网络,例如:

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

但是,它不会起作用,因为它会返回:

<DeliveryMethod>WebService1</DeliveryMethod>

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

任何想法将不胜感激!

【问题讨论】:

  • javascript != java

标签: java xml xml-parsing nashorn


【解决方案1】:

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

如果要获取所有标签,&lt;XmlParser.Node&gt;.iterator 会返回一个 Iterator,其中包含与标签匹配的所有子节点。

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

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

【讨论】:

  • 像魅力一样工作。谢谢,@ skara9。道歉,因为我不熟悉 Java,必须按项目使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2011-05-03
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多