通过给出其名称来查找属性的值

时间:2014-09-02 13:22:56

标签: java xml

<TestSuite name="FixTracerTests">

    <Test name="IM-Tracer" verbose="false">

        <Message action="send1" connection="IMTracerConnection">

            <Field name="MsgType" value="J" />

            <Field name="ABC" value="APPLE" /> <!-- Auto Generated.. -->

            <Field name="DEF" value="SAMSUNG" />

            <Field name="XYZ" value="HTC" />

            <Field name="GHI" value="SONY" />

        </Message>

    </Test>

</TestSuite>

我试图通过使用Java来访问特定属性的值。例如,如果用户要求&#34; name =&#34; ABC&#34;的值,那么我应该得到&#34; APPLE&#34;。有人可以帮助我吗?

我试过这件事:

public static void main(String[] args) throws Exception {

    File xmlfile = new File("file.xml");

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    DocumentBuilder db = dbf.newDocumentBuilder();

    Document document = db.parse(xmlfile);

    NodeList node = document.getElementsByTagName("Field");

    System.out.println("Enter name =");

    String name = userInputScanner.nextLine(); 

    NamedNodeMap attributes = node.getAttributes();

    System.out.println(node.item(0).getAttributes().getNamedItem("value").getNodeValue());

}

1 个答案:

答案 0 :(得分:0)

似乎这个jdom可以成功 我没有尝试过,但我的想法是融入上下文:

SAXBuilder sxb = new SAXBuilder();
try {
  document = sxb.build(new File("Exercice2.xml"));
} catch(Exception e){}
root = document.getRootElement();
Iterator i = root.getChild("Test").getChild("Message").getChildren("Field").iterator();
while(i.hasNext())
{
  Element current = (Element)i.next();
  if(current.getAttributeValue("name") == nameDesired) {
  return current.getAttributeValue("value");
}
return null;

这只是一个我从未使用过jdom的想法,但是我已经阅读过它应该对你自己的代码进行一些调整。