2

在编译时使用 JAVA将我的HTML/JSP解析为DOM。现在我有了w3c.dom.Document对象,假设下面的 HTML

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

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

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

编辑 :

我永远不会知道 HTML 内容是什么。我的程序应该在给定的 HTML/JSP 文件列表上运行,并且我有一些元素名称。这里的元素名称是指 HTML/JSP 中可用字段的标签/名称。所以我需要遍历所有文件获取具有相同标签/名称的节点并获取节点。

4

4 回答 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());
于 2012-11-08T06:22:06.853 回答
1

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

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

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

于 2012-11-08T05:51:55.677 回答
1

你可以这样说:

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

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

于 2012-11-08T06:02:33.583 回答
1

通常,您按属性名称搜索属性,例如“名称”,而不是属性值,例如“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

这是一个类似的非 Java Stack Overflow 链接

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

尚未针对您的情况对此进行测试,因此请谨慎购买

于 2012-11-08T06:20:08.587 回答