[英]How to get value of XML tag with different attributes?
我需要從具有不同屬性的XML標記中獲取價值。
例如:XML
<metaData>
<parameter name="HTTP-Method">POST</parameter>
<parameter name="HTTP-URI">/loan/test?testArg=1234&id=5555555</parameter>
<parameter name="HTTP-Version">HTTP/1.1</parameter>
<parameter name="Host">localhost:7002</parameter>
<parameter name="Content-Length">0</parameter>
<parameter name="Origin">chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop</parameter>
</netaData>
在這里,我需要獲取帶有屬性“ HTTP-Method”的標記“ parameter”的值和具有屬性“ HTTP-URI”的另一個值
我該做什么:
NodeList nodeList = document.getElementsByTagName("parameter");
for (int i = 0, size = nodeList.getLength(); i < size; i++) {
Element elem = (Element) nodeList.item(i);
在這里,我得到了所有參數標簽。 如何獲得特定的?
此代碼塊
for (int i = 0; i < nodeList.getLength(); i++) {
Element elem = (Element) nodeList.item(i);
String attribute = elem.getAttribute("name");
if ("HTTP-Method".equals(attribute) || "HTTP-URI".equals(attribute)) {
System.out.println(elem.getTextContent());
}
}
將打印
POST
/loan/test?testArg=1234&id=5555555
借助Dynamics &Java 8庫,可以直接完成此操作。 使用Streams和lambda,我們可以以相當自然的方式遍歷xml。
XmlDynamic example = new XmlDynamic("<metaData>" +
"<parameter name=\"HTTP-Method\">POST</parameter>" +
"<parameter name=\"HTTP-URI\">/loan/test?testArg=1234&id=5555555</parameter>" +
"</metaData>");
String uri = example.get("metaData")
.children()
.filter(parameter -> parameter.get("@name").asString().equals("HTTP-URI"))
.findAny()
.map(parameter -> parameter.asString())
.get(); // assuming this value is always there
或者,如果不那么保證xml具有我們期望的內容,則可能更具防御性。
Optional<String> uri = example.get("metaData")
.children()
.filter(param -> param.get("@name").maybe().asString().orElse("").equals("HTTP-URI"))
.findAny()
.map(param -> param.asString());
您可以使用以下方法將庫添加到您的Maven項目中:
<dependency>
<groupId>com.github.alexheretic</groupId>
<artifactId>dynamics</artifactId>
<version>2.3</version>
</dependency>
您可以使用GitHub上提供的Scilca XML Progression Package。
List<Node> list = document.getElementsWithAttribute(new Attribute("Name", "HTTP-URI", true); // True cause the value of the attribute should be same
Node need = list.get(0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.