2012-11-08 23 views
2

我已經使用JAVA在編譯時間處將DOM的HTML/JSP解析爲DOM。現在,我有我的w3c.dom.Document對象,讓我們說了下面的HTML如何使用其屬性找到DOM節點

..... 
    .... 
<input type="text" name="EnterName"/> 
<select name="SelectOptions"> 
<option>First</option> 
<option>Second</option> 
</select> 
...... 
....... 

我知道元素的屬性值。這裏「EnterName」「名稱」節點「輸入」的屬性值。

假設我有DOM中可用的所有節點的屬性值(如上面的HTML中的「EnterName」,「SelectOptions」),如何獲得具有給定值的特定屬性的節點。由於

編輯:

我永遠不會知道什麼的HTML內容。我的程序應該在 的HTML/JSP文件列表上運行,並且我有一些元素名稱。 此處的元素名稱是指HTML/JSP中可用字段 的標籤/名稱。所以我需要遍歷所有文件,得到 節點,它具有相同的標籤/名稱並獲取節點。

在HTML

回答

4

嘗試這樣的事情沒有測試:

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document doc = dBuilder.parse("yourDocumentName"); 
    doc.getDocumentElement().normalize(); 
    NodeList nlList = doc.getElementsByTagName("input"); 
    for (int indx= 0; indx < nList.getLength(); indx++) { 
     Element eElement = (Element) nList.item(indx); 
     if(eElement.getAttribute("name").equals("EnterName")){ 
       System.out.println("EnterName: " + eElement.getNodeValue()); 
     } 
    } 

    NodeList nlList1 = doc.getElementsByTagName("select"); 
    for (int indx= 0; indx < nList1.getLength(); indx++) { 
     Element eElement = (Element) nList1.item(indx); 
     if(eElement.getAttribute("name").equals("SelectOptions")){ 
       System.out.println("SelectOptions: " + eElement.getNodeValue()); 
     } 
    } 

如果你可以添加「ID」到你的元素,然後它要容易得多:

<input type="text" name="EnterName" id="name"/> 
<select name="SelectOptions" id="options"> 
    ... 


    Element nameElement = doc.getElementbyId("name"); 
    System.out.println("EnterName: " + nameElement.getNodeValue()); 
    Element selectElement = doc.getElementbyId("name"); 
    System.out.println("SelectOptions: " + selectElement.getNodeValue()); 
+0

請檢查我的編輯問題,並建議 – Murugesh

+0

感謝您的回答。我遍歷了節點並找到了具有該值的適當屬性,並得到了我想要的 – Murugesh

1

您可以添加自定義屬性,例如區分betweeen HTML組件

<input type="text" name="EnterName" myattr1="yes"/> 
<select name="SelectOptions" myattr2="yes"> 
<option>First</option> 
<option>Second</option> 
</select> 
自定義的基礎上

屬性,你可以檢查和分化的HTML組件...

+0

我不應該改變HTML.That是不是在我的控制,T hanks你的答案 – Murugesh

1

你可以說這樣的事:

Element input = .... documene.getElementByTagName("input"); 
Attribute eneterName = root.getAttributeNode("EnterName"); 
String s = enterName.getXXXValue(); 

請參閱API獲取正確的方法來檢索val UE。

+0

請檢查我的EDIT的問題和建議 – Murugesh

+0

謝謝,我得到了我想要的 – Murugesh

1

通常,您可以通過名稱搜索屬性,例如, 「名稱」,而不是它們的值,例如「輸入名字」。所以你通常會去

String valueForName = myElement.getAttribute("name"); 

對於任何非常複雜的事情,我使用XPath。它適用於你想要的東西。這裏有一個看起來像你想要的東西,(雖然它不是Java,它是足夠接近)一個博客:

http://blogs.msdn.com/b/davidklinems/archive/2007/03/13/quick-tip-using-xpath-to-find-nodes-by-attribute-value.aspx

這裏有一個similar non-Java Stack Overflow link

在Java中,它有點乏味闡述,但是,粗略。 ..

XPathFactory anXPathfactory = XPathFactory.newInstance(); 
XPath xpath = anXPathfactory.newXPath(); 
XPathExpression xpe = xpath.compile("your xpath goes here"); 
String finallyIGetSomething = (String) xpe.evaluate(node, XPathConstants.STRING); 

對於你的情況,以便買者自負

+0

請檢查我的編輯問題,並建議 – Murugesh

+0

謝謝,我得到了解決方案 – Murugesh

相關問題