2016-10-09 79 views
0

我需要從具有不同屬性的XML標記中獲取值。如何獲取具有不同屬性的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> 

在這裏,我需要得到tag 「參數」 的值與屬性 「HTTP法」 和另一個屬性 「HTTP-URI」

這是我做的:

NodeList nodeList = document.getElementsByTagName("parameter"); 
for (int i = 0, size = nodeList.getLength(); i < size; i++) { 
     Element elem = (Element) nodeList.item(i); 

這裏我得到了所有的參數標籤。我怎樣才能得到具體的一個?

+0

你看看[文件](https://docs.oracle.com/javase/8/docs/api/庫添加到您的Maven項目org/w3c/dom/Element.html)在問這個問題之前? – VGR

回答

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 
0

您可以使用XML Scilca進展封裝在GitHub上。

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); 
1

與庫Dynamics &的Java 8這可以非常直接完成。使用Streams和lambdas,我們可以以相當自然的方式瀏覽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()); 

您可以

<dependency> 
    <groupId>com.github.alexheretic</groupId> 
    <artifactId>dynamics</artifactId> 
    <version>2.3</version> 
</dependency> 
相關問題