有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用DOM节点的属性查找DOM节点

我在编译时使用JAVA将我的HTML/JSP解析为DOM。现在我有了w3c。多姆。Document与我一起创建对象,比如下面的HTML

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

我知道元素的属性值。这里的“EnterName”是节点“input”的“name”属性值

假设我有DOM中所有可用节点的属性值(如上面HTML中的“EnterName”、“SelectOptions”),如何获得一个节点,其中一个特定属性可以使用给定的值。谢谢

编辑:

I will never know whats the HTML contents. My program should run on given list of HTML/JSP files and I have with me some element names. Here the element name refers to the label/name of the fields available in the HTML/JSP. So I need to traverse through all the files get the node where it has the same label/name and get the node.


共 (4) 个答案

  1. # 1 楼答案

    你可以这样说:

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

    请参考API以获得正确的方法来检索值

  2. # 2 楼答案

    通常,您会按属性的名称(例如“名称”)搜索属性,而不是按属性的值(例如“EnterName”)搜索属性。所以你通常会去

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

    还没有测试过你的案子所以请注意

  3. # 3 楼答案

    例如,可以在html中添加自定义属性来区分html组件

    <input type="text" name="EnterName" myattr1="yes"/>
    <select name="SelectOptions" myattr2="yes">
    <option>First</option>
    <option>Second</option>
    </select>
    

    根据自定义属性,您可以检查并区分HTML组件

  4. # 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());