0

申し訳ありませんが、タグ名とその属性を考慮してタグ値を取得する方法についてお聞きしたいと思います。luceneのインデックス作成にXMLを使用します

これはXMLです

 <?xml version="1.0" encoding="utf-8"?>
<Root xmlns:wb="http://www.worldbank.org">
  <data>
    <record>
      <field name="Country or Area" key="ARB">Arab World</field>
      <field name="Item" key="AG.AGR.TRAC.NO">Agricultural machinery, tractors</field>
      <field name="Year">1961</field>
      <field name="Value">73480</field>
    </record>
  </data>
</Root>

初期のプロジェクトでは、次のようなソースでのみタグ値を取得します。

private String getTagValue(String tag, Element e) {
        NodeList nlList = e.getElementsByTagName(tag).item(0).getChildNodes();
        Node nValue = (Node) nlList.item(0);
        return nValue.getNodeValue();
    }

しかし今、私はその属性を検討したいので、正しい値を取得するためにどのタグと属性を定義する必要があります。答えてくれてありがとう

4

2 に答える 2

1

この目的のためにxpathクエリを使用します。まず、これに似たクエリを作成します(たとえば、特定の値を持つフィールドノードを取得するため)。

myQuery = xpath.compile("//field[@value=\"1234\"]");

次に、dom docでクエリを実行して、ノードセットにデータを入力します。

Object nodeSet = myQuery.evaluate(doc, XPathConstants.NODESET);
于 2013-01-13T03:14:26.447 に答える
0

getTagValueを次のように変更します

private static String getTagValue(NodeList list, String name) {
    for (int i = 0; i < list.getLength(); i++) {
        Element e = (Element) list.item(i);
        if (e.getAttribute("name").equals(name)) {
            return e.getTextContent();
        }
    }
    return null;
}

public static void main(String[] args) throws Exception {
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder()
            .parse(new File("1.xml"));
    NodeList fields = doc.getElementsByTagName("field");
    String country = getTagValue(fields, "Country or Area");
    String year = getTagValue(fields, "Year");
}
于 2013-01-13T05:04:40.303 に答える