首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用简单XML解析XML []

用简单XML解析XML []
EN

Stack Overflow用户
提问于 2016-05-26 09:19:16
回答 2查看 1.9K关注 0票数 0

如何解析此XML:

代码语言:javascript
复制
<resources> 
    <string name="name1">content1</string> 
    <string name="name2">content2</string> 
    <string name="name3">content3</string> 
    ...
</resources> 

我无法创建具有正确注释的对象来检索名称和内容.

我目前的工作:

代码语言:javascript
复制
@Root(name = "resources")
public class Translation {

    @ElementList(inline = true)
    private List<TranslationName> translationNames;

    public List<TranslationName> getTranslationNames() {
        return translationNames;
    }
}

代码语言:javascript
复制
@Root(name = "string")
public class TranslationName {

    @Attribute(name = "name")
    private String name;
    @Element(name = "string")
    private String content;

    public String getName() {
        return name;
    }

    public String getContent() {
        return content;
    }
}

但我有:

无法满足@org.simpleframework.xml.Element(data=false、name=string、required=true、type=void)在字段“内容”上的要求

编辑:

在此之后,我成功地恢复了内容:

代码语言:javascript
复制
@Root(name = "resources")
public class Translation {

    @ElementList(inline = true)
    private List<String> contentNames;

    public List<String> getContentNames() {
        return contentNames;
    }
}

但是,将两者结合起来是行不通的:

代码语言:javascript
复制
@Root(name = "resources")
public class Translation {

    @ElementList(inline = true)
    private List<TranslationName> translationNames;
    @ElementList(inline = true)
    private List<String> contentNames;

    public List<TranslationName> getTranslationNames() {
        return translationNames;
    }

    public List<String> getContentNames() {
        return contentNames;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-05-26 12:21:17

类给出的xml类似

代码语言:javascript
复制
 <resources>
   <string name="name1"> <string>content1</string>   </string>
   <string name="name2"> <string>content2</string>   </string>
   <string name="name3"><string>content3</string>   </string>
 </resources>

对于内容属性,请改为:

代码语言:javascript
复制
@Text
    private String content;
票数 0
EN

Stack Overflow用户

发布于 2019-04-12 17:29:54

您可以自己编写XML解析器,而不是尝试使用神奇的注释组合来实现某些事情。不要使用Stax/pull -这是太低,硬和错误容易直接使用。试试Konsume

代码语言:javascript
复制
data class Resource(val name: String, val content: String)

val konsumer = """
<resources>
    <string name="name1">content1</string>
    <string name="name2">content2</string>
    <string name="name3">content3</string>
</resources>
""".trimIndent().konsumeXml()
val resources: List<Resource> = konsumer.child("resources") {
    children("string") {
        Resource(attributes["name"], text())
    }
}
println(resources)

将打印

代码语言:javascript
复制
[Resource(name=name1, content=content1), Resource(name=name2, content=content2), Resource(name=name3, content=content3)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37456580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档