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」などの値ではなく、「name」などの名前で属性を検索します。だからあなたは通常行きます

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 スタック オーバーフロー リンクを次に示します。

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

あなたのケースでこれをテストしていないので、emptorに注意してください

于 2012-11-08T06:20:08.587 に答える