簡體   English   中英

如何獲得具有不同屬性的XML標簽的價值?

[英]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&amp;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&amp;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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM