我使用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中。所以我需要遍历所有文件得到的 节点,它具有相同的标签/名称并获取节点。
答案 0 :(得分: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());
答案 1 :(得分:1)
您可以在html中添加自定义属性,例如区分html组件
<input type="text" name="EnterName" myattr1="yes"/>
<select name="SelectOptions" myattr2="yes">
<option>First</option>
<option>Second</option>
</select>
根据自定义属性,您可以检查和区分HTML组件...
答案 2 :(得分:1)
你可以这样说:
Element input = .... documene.getElementByTagName("input");
Attribute eneterName = root.getAttributeNode("EnterName");
String s = enterName.getXXXValue();
请参阅API以获取正确的方法来检索该值。
答案 3 :(得分:1)
通常,您可以按名称搜索属性,例如“名称”,而不是它们的价值,例如“输入名字”。所以你通常会去
String valueForName = myElement.getAttribute("name");
对于任何非常复杂的事情,我使用XPath。哪个适用于您想要的。这是一个看起来就像你想要的博客(尽管它不是Java,它足够接近):
这是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);
没有针对您的情况对此进行测试,因此请注意