如何在android中解析xml文件?

How to parse an xml file in android?

提问人:Ankit Verma 提问时间:6/28/2022 更新时间:7/27/2022 访问量:690

问:

我有一个XML文件,如

<container xmlns="urn:oasis:names:tc:opendocument:xmlns:container" version="1.0">
   <rootfiles>
        <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
   </rootfiles>
</container>

我需要“OEBPS/content.opf”文本的值。我尝试使用文档生成器和XML解析器,但没有结果。如何遍历到该节点并获取值full-path

java android xml xml 解析

评论

0赞 Bruno 6/28/2022
你好。你试过这个指南吗?developer.android.com/training/basics/network-ops/xml

答:

-1赞 Int'l Man Of Coding Mystery 6/28/2022 #1

我使用 Jackson 来序列化和反序列化(解析)xml。我为每个元素制作一个 POJO,然后根据需要使用它解析到 POJO 的注释。下面是一个粗略的例子。但是这两个外部类将使用注释忽略所有内容(除非您将其包含在 POJO 中)。该类将使用注释解析所需的属性。@JsonIgnorePropertiesRootfile@JacksonXmlProperty

旁注:我不是 100% 在 .这就是我标记 xml 根的方式,但我的同事使用@JsonRootName@JackonXmlRootElement(value = "...")

@JsonRootName(value = "container")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Container {

  @JsonIgnoreProperties(ignoreUnknown = true)
  public class Rootfiles {

    @JsonRootName(value = "rootfile")
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class Rootfile {
      
      @JacksonXmlProperty(isAttribute = true, localName = "full-path")
      private String fullPath;

      public String getFullPath() { return fullPath; }
    }
  }
}

评论

0赞 Ankit Verma 6/29/2022
@JacksonXmlProperty - 找不到此注解,能否指定使用的特定依赖项。
0赞 Int'l Man Of Coding Mystery 6/30/2022
有几个不同的注释,但这个与该注释有关。我还更新了答案中的链接,其中包含包裹信息以及:D,我粘贴了错误的链接。对不起,fasterxml.github.io/jackson-dataformat-xml/javadoc/2.2.0/com/...
0赞 Ankit Verma 7/27/2022 #2

我找到了一种访问属性值的方法。我已经解释了评论中的所有行。

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = factory.newDocumentBuilder();

 Document doc = builder.parse(file);   // We can use inputstream or uri also

 NodeList node = doc.getElementsByTagName("rootfile"); //  gets list of all nodes by specified tag name.

 Node map = node.item(0); // Getting the specific node

 NamedNodeMap namedNodeMap = map.getAttributes();  // Getting attributed of the nodes.
            
 Node file_path = namedNodeMap.getNamedItem("full-path"); // getting the partcular node attribute

 String path = file_path.getNodeValue();  // This will give the value of full-path