如何使用元素值获取xml元素?

时间:2015-02-09 14:13:42

标签: java xml jaxb

我需要使用元素值获取xml元素,我必须使用jaxb获取带有xml元素的父元素?

示例XML:

 <ifx>
<nam-ref>LID</nam-ref>
<val>01</val>
<then>
    <int>
        <name>WHEELSPEED</name>
        <description></description>            
    </int>
    <int>
        <name>FRONT</name>
        <description></description>
    </int>
    <manyInt>
        <int>
            <name>REAR_LEFT</name>
            <description></description>
        </int>
    </manyInt>
    <int>
        <name>REAR_RIGHT</name>        
    </int>
</then>

我只知道名称值为“REAR_LEFT”。有了这个,我找到了xml元素及其父元素。

1 个答案:

答案 0 :(得分:0)

如果你有一个模式并生成很多类并遍历每个属性来查找你搜索的值,你可以用JAXB做到这一点。 或者您使用了一点data projection(披露:我隶属于该项目):

import org.xmlbeam.XBProjector;
import org.xmlbeam.XBProjector.Flags;
import org.xmlbeam.annotation.XBRead;

public class Demo {

    public interface Projection {

        @XBRead("name()")
        String getType();

        @XBRead("./name")
        String getName();

        @XBRead("./description")
        String getDescription();
    }

    public static void main(String[] args) {
        String xpath="//*[name='REAR_LEFT']";
        Projection projection = new XBProjector(Flags.TO_STRING_RENDERS_XML).io().url("res://data.xml").evalXPath(xpath).as(Projection.class);
        System.out.println(projection.getType()+":"+projection.getName()+" "+projection.getDescription());
        System.out.println("As XML:\n"+projection);
    }

}

在纠正你的XML(添加根元素,关闭ifx元素)之后,这个程序打印出来:

int:REAR_LEFT 
As XML:
<int>
    <name>REAR_LEFT</name>
    <description/>
</int>

这是它的工作原理:

  • xpath //*[name='REAR_LEFT']选择具有名为“name”的子项的每个元素,其内容为“REAR_LEFT”。
  • XBProjector将所选元素“投影”到Java接口Projection
  • 投影界面可以通过定义的投影方法访问元素中的数据(例如,类型,名称和描述=
  • 投影界面可以自己打印为XML