【发布时间】: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