我需要从具有不同属性的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>
这里我需要获得tag&#34;参数&#34;的值。具有属性&#34; HTTP-Method&#34; 另一个具有属性&#34; HTTP-URI&#34;
我这样做:
NodeList nodeList = document.getElementsByTagName("parameter");
for (int i = 0, size = nodeList.getLength(); i < size; i++) {
Element elem = (Element) nodeList.item(i);
这里我得到了所有的参数标签。我怎样才能得到具体的一个?
答案 0 :(得分:1)
这段代码
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
答案 1 :(得分:1)
使用图书馆Dynamics&amp; Java 8可以直接完成。使用Streams和lambdas,我们可以以相当自然的方式遍历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>
答案 2 :(得分:0)
您可以使用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);