使用 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();
我目前正在 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();