【问题标题】:Querying XML in Java relationally在 Java 中以关系方式查询 XML
【发布时间】:2016-09-09 18:12:34
【问题描述】:

我如何在 Java 中做到这一点?我有这个 XML ...

我只想...

如果 TypeCode =Country & Code1 =Ger 返回德国(Value1的值)

如果 TypeCode =Country & Code1 =De 返回德国(Value2的值)

如果 TypeCode =Country && (Code1 =De & Code1 =Ger) 返回德国(Value1 的值) AND 返回德国(Value2的值)

<Entities>
   <EntityType TypeCode="Country">
      <Code1>Ger</Code1>
      <Code2>De</Code2>
      <Value1>Germany</Value1>
      <Value2>Deutschland</Value2>
      <Default>GERMANY</Default>
   </EntityType>
   <EntityType TypeCode="Country">
      <Code1>Ger</Code1>
      <Code2>De</Code2>
      <Value1>Germany</Value1>
      <Value2>Deutschland</Value2>
      <Default>GERMANY</Default>
   </EntityType>
</Entities>

任何sn-p都会有帮助

【问题讨论】:

  • 请把这个放在你的问题中,不要在评论中。
  • 它是否总是将德国作为一个国家进行编码。除了德国和德国,你还有其他组合吗?
  • 分享您尝试过的代码。也让我们知道 API 在第三种情况下应该如何返回 2 个值
  • 我可能使这些值变得多余,但并不总是德国。值会不断变化

标签: java


【解决方案1】:

在 Java 中执行此操作的最可靠的方法可能是使用 JAX-B (http://www.oracle.com/technetwork/articles/javase/index-140168.html)。使用 JAX-B 可以获得许多优势,其中最重要的是

  • 将 POJO 自动编组/转换为 XML 文件
  • 从 XML 文件自动解组到 POJO 中
  • XSD 验证(如果使用 XSD 架构)
  • 从 XSD 文件生成 POJO 类

现在,您的示例的简单实现将是

实体 POJO

    **import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Entities")
public class Entity {

    @XmlElement(required = true)
    private List<EntityTyp> EntityType ;


     public List<EntityTyp> getEntityType() {
            if (EntityType == null) {
                EntityType = new ArrayList<EntityTyp>();
            }
            return EntityType;
        }
}**

EntityTyp POJO

    import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;

public class EntityTyp {
     @XmlAttribute(name = "TypeCode", required = true)
        private String TypeCode; 
         @XmlElement 
        private String Code1;
            @XmlElement 
        private String Code2;
             @XmlElement 
        private String Value1;
             @XmlElement 
        private String Value2;
             @XmlElement 
        private String Default;

        public String getCode1(){
            return Code1;
        }
        public String getCode2(){
            return Code2;
        }
        public String getVal1(){
            return Value1;
        }
        public String getVal2(){
            return Value2;
        }
        public String getDefault(){
            return Default;
        }
        public String getTypeCode(){
            return TypeCode;
        }
        public void setCode1(String code){
            Code1 = code;
        }
        public void setCode2(String code){
            Code2 = code;
        }
        public void setVal1(String val){
            Value1 = val;
        }
        public void setVal2(String val){
            Value2 = val;
        }
        public void setDefault(String val){
            Default = val;
        }
        public void setTypeCode(String val){
            TypeCode = val;
        }


}

最后,EntityTester(用于测试)

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;


import jaxb.schema.src.Entities;


    *import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Unmarshaller;

        public class EntityTester {

            public static void main(String[] args) throws JAXBException {
                // TODO Auto-generated method stub
             final String ENT_XML = "C:\\test\\Entity.xml";

                JAXBContext context = JAXBContext.newInstance(Entity.class);

                  Unmarshaller um = context.createUnmarshaller();

                  Entity ent = (Entity) um.unmarshal(new File(ENT_XML));

                  for( EntityTyp et : ent.getEntityType() ){
                      System.out.println( et.getCode1());
                      System.out.println( et.getVal1());
                  }
            }

        }*

输出是

 Ger
Germany
Ger
Germany

只要确保您创建了一个 JAXB 项目,以便拥有所有依赖项(jar)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多