【问题标题】:Extract values from xml file using Java使用Java从xml文件中提取值
【发布时间】:2019-08-22 11:01:32
【问题描述】:

这是我的响应包含 XML 文件,我想从这个 xml 响应中检索 bEntityID="328"

  <?xml version="1.0" encoding="UTF-8"?>
<ns2:aResponse xmlns:ns2="http://www.***.com/F1/F2/F3/2011-09-11">
   <createBEntityResponse bEntityID="328" />
</ns2:aResponse>

我正在尝试这样做,但得到 null

    System.out.println("bEntitytID="+XmlPath.with(response.asString())
   .getInt("aResponse.createBEntityResponse.bEntityID"));

有什么建议可以从此回复中获取BEntityID

【问题讨论】:

    标签: java xml spring-boot for-xml-path


    【解决方案1】:

    虽然我不建议使用下面的方法来使用正则表达式来获取元素值,但是如果你太绝望了,那么试试下面的代码:

    public class xmlValue {
        public static void main(String[] args) {
            String xml = "<ns2:aResponse xmlns:ns2=\"http://www.***.com/F1/F2/F3/2011-09-11\">\n" +
                    "   <createBEntityResponse bEntityID=\"328\" />\n" +
                    "</ns2:aResponse>";
            System.out.println(getTagValue(xml,"createBEntityResponse bEntityID"));
        }
        public static  String  getTagValue(String xml, String tagName){
             String [] s;
             s = xml.split("createBEntityResponse bEntityID");
             String [] valuesBetweenQuotes = s[1].split("\"");
             return  valuesBetweenQuotes[1];
        }
        }
    

    输出:328

    注意:更好的解决方案是使用 XML 解析器

    这将获取第一个标签值:


    public static String getTagValue(String xml, String tagName){
        return xml.split("<"+tagName+">")[1].split("</"+tagName+">")[0];
    }
    

    其他方法是使用 JSoup:

    Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); //parse the whole xml doc
    for (Element e : doc.select("tagName")) {
        System.out.println(e); //select the specific tag and prints
    }
    

    【讨论】:

    • 尝试了第一种方法..但得到 ArrayIndexOutOfBoundException
    • @MangduYogii ,请检查我添加的第一个代码。只需将其包装在某个函数中,它就会始终为您获取与标签匹配的值。
    • 这是一种非常复杂的解析 Xml 的方法,如果更正,相关代码会出现轻微的编码错误。不知道为什么在这种情况下需要改变库的方法。
    【解决方案2】:

    我认为最好的方法是像here一样将xml反序列化为pojo,然后获取值

    entityResponse.getEntityId();
    

    【讨论】:

      【解决方案3】:

      我尝试使用相同的 XML 文件,并能够使用以下代码获取 bEntityId 的值。希望对您有所帮助。

      @Test
      public void xmlPathTests() {
          try {
          File xmlExample = new File(System.getProperty("user.dir"), "src/test/resources/Data1.xml");
          String xmlContent = FileUtils.readFileToString(xmlExample);
      
          XmlPath xmlPath = new XmlPath(xmlContent).setRoot("aResponse");
      
          System.out.println(" Entity ::"+xmlPath.getInt(("createBEntityResponse.@bEntityID"))); 
      
          assertEquals(328, xmlPath.getInt(("createBEntityResponse.@bEntityID")));
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      

      【讨论】:

      • 这个测试用例的驱动代码是什么。什么是实际和预期?
      • 仅供说明,目的是回答用户查询,反正已经更新了代码sn-p。为指出这一点而欢呼。
      猜你喜欢
      • 2018-07-22
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 1970-01-01
      相关资源
      最近更新 更多