我一直在尝试使用simplexml库(v2.6.2)http://simple.sourceforge.net/home.php创建XML
我想要创建的XML必须保存枚举值,该值应区分大小写.以下是POJO:
package pojos;
public enum MyEnum {
NEW("new"),
OLD("old");
private final String value;
MyEnum(String v)
{
value = v;
}
public String value() {
return value;
}
public static MyEnum fromValue(String v) {
for (MyEnum c: MyEnum.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是序列化代码:
import java.io.File;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import pojos.MyEnum;
public class TestEnum {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws …Run Code Online (Sandbox Code Playgroud) 简单的XML允许您制作自己的转换器.
此write方法用于将对象序列化为XML.应该以这样的方式执行序列化:所有对象值由所提供节点的元素或属性表示.这确保了它可以在以后完全反序列化.
@Convert(MyClass.Converter.class)
public class MyClass {
public MyClass() {}
public static class Converter implements Converter<MyClass> {
public MyClass read(InputNode node) {
return new MyClass();
}
public void write(OutputNode node, MyClass value) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
该文档描述了在OutputNode中表示元素,那么如何向OutputNode添加元素?OutputNode的文档似乎没有任何方法可以向其添加元素或节点.
我正在尝试学习如何使用此线程中详述的Simple XML Framework:解析XML的最佳实践.
我使用以下代码:
public class SimpleXMLParserActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
Serializer serializer = new Persister();
Example example = new Example("Example message", 123);
File result = new File("example.xml");
try {
Log.d("Start", "Starting Serializer");
serializer.write(example, result);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("Self", "Error");
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在理解这条线时遇到了问题
File result = new File("example.xml");
Run Code Online (Sandbox Code Playgroud)
1)这行是否在我的app中创建了一个名为example.xml的新文件?如果是这样,该文件位于何处.
2)或者这行是否找到一个名为example.xml的现有文件然后添加到它?如果是这样,应该将example.xml文件放在我的应用程序包中,以便找到它.我确实注意到我收到一条错误消息:
java.io.FileNotFoundException: /example.xml (Read-only …Run Code Online (Sandbox Code Playgroud) 我正在使用SimpleXML库.我需要获取rss feed并将其转换为java对象.这里我需要映射到对象的XML
<rss xmlns:lj="http://www.livejournal.org/rss/lj/1.0/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom10="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>??????! ?????! ?? ?????! ? ?? ? ???!</title>
<link>http://xuma.livejournal.com/</link>
<description>
??????! ?????! ?? ?????! ? ?? ? ???! - LiveJournal.com
</description>
<lastBuildDate>Thu, 17 Mar 2011 10:08:33 GMT</lastBuildDate>
<generator>LiveJournal / LiveJournal.com</generator>
<lj:journal>xuma</lj:journal>
<lj:journalid>5295048</lj:journalid>
<lj:journaltype>personal</lj:journaltype>
<copyright>NOINDEX</copyright>
<image>
<url>http://l-userpic.livejournal.com/104864030/5295048</url>
<title>??????! ?????! ?? ?????! ? ?? ? ???!</title>
<link>http://xuma.livejournal.com/</link>
<width>66</width>
<height>100</height>
</image>
<item>
<guid isPermaLink="true">http://xuma.livejournal.com/7831.html</guid>
<pubDate>Thu, 17 Mar 2011 10:08:33 GMT</pubDate>
<title>??????. ??????? ????????????.</title>
<link>http://xuma.livejournal.com/7831.html</link>
<description>...</description>
<comments>http://xuma.livejournal.com/7831.html</comments>
<lj:security>public</lj:security>
<lj:reply-count>0</lj:reply-count>
</item>
<item>
<guid isPermaLink="true">http://xuma.livejournal.com/7575.html</guid>
<pubDate>Sat, 16 Oct …Run Code Online (Sandbox Code Playgroud) 我正在努力捕获标签中包含的元素的顺序.这是所有代码:
League.java:
@Root
@Convert(value = LeagueConverter.class)
public class League
{
@Attribute
private String name;
@Element(name="headlines", required = false)
private Headlines headlines;
@Element(name="scores", required = false)
private Scores scores;
@Element(name="standings", required = false)
private Standing standings;
@Element(name="statistics", required = false)
private LeagueStatistics statistics;
public List<String> order = new ArrayList<String>();
// get methods for all variables
}
Run Code Online (Sandbox Code Playgroud)
LeagueConverter.java:
public class LeagueConverter implements Converter<League>
{
@Override
public League read(InputNode node) throws Exception
{
League league = new League();
InputNode next = node.getNext();
while( …Run Code Online (Sandbox Code Playgroud) 我正在使用simplexml解析来从网络中获取数据.解析它时显示以下错误.
错误:
org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=false, name=, required=true, type=void) on field 'jobs' private java.util.List com.example.simpledataparsing.JobList.jobs for class com.example.simpledata.line2
Run Code Online (Sandbox Code Playgroud)
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<joblist>
<job><id>75027</id><status>OPEN</status><customer>Manikandan</customer><address>asdf</address><city>salem</city><state>tn</state><zip>636005</zip><product>pipe</product><producturl></producturl><comments>asdf</comments></job>
</joblist>
Run Code Online (Sandbox Code Playgroud)
pojo类:JobList.java
package com.example.simpledataparsing;
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@Element (name="joblist")
public class JobList {
@ElementList
private List<Job> jobs;
public List<Job> getJobs() {
return jobs;
}
public void setJobs(List<Job> jobs) {
this.jobs = jobs;
}
}
Run Code Online (Sandbox Code Playgroud)
Job.java
package com.example.simpledataparsing;
import org.simpleframework.xml.Element;
@Element (name = "job")
public class Job {
@Element …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析来自 API 的 XML 响应,但“Field”元素列表有问题。我正在尝试创建具有元素内部属性和文本的 Field 对象,例如该对象的属性,但无法找出我需要为元素文本使用什么注释。\n我尝试使用
\n\n @get:Text\n @set:Text\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\n@field:Text\nRun Code Online (Sandbox Code Playgroud)\n\n但得到了同样的错误
\n\njava.lang.RuntimeException: org.simpleframework.xml.core.PersistenceException: Constructor not matched for class NetworkTestContainer$Field\nRun Code Online (Sandbox Code Playgroud)\n\n任何人都可以为我提供适合此案例的适当注释吗?
\n\n有XML结构:
\n\n<response>\n<commands>\n <command>\n <nick>QUEUECAUSES_LIST</nick>\n <result>\n <DATASET Version="1.0" Class="TQueryAdv" Name="">\n <Row Index="1">\n <Field Name="SHOPID" Type="6" Size="0">-1</Field>\n <Field Name="IDCODE" Type="6" Size="0">3000000000001</Field>\n <Field Name="CAPTION" Type="1" Size="255">\xd0\x9a\xd0\xbe\xd0\xbd\xd1\x81\xd1\x83\xd0\xbb\xd1\x8c\xd1\x82\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f</Field>\n <Field Name="PRIORITY" Type="6" Size="0">0</Field>\n </Row>\n <Row Index="2">\n <Field Name="SHOPID" Type="6" Size="0">-1</Field>\n <Field Name="IDCODE" Type="6" Size="0">3000000000021</Field>\n <Field Name="CAPTION" Type="1" Size="255">\xd0\x9e\xd1\x87\xd0\xb5\xd1\x80\xd0\xb5\xd0\xb4\xd1\x8c</Field>\n <Field Name="PRIORITY" Type="6" Size="0">1</Field>\n </Row>\n </DATASET>\n </result>\n </command>\n</commands>\n</response>\nRun Code Online (Sandbox Code Playgroud)\n\n … 我必须在Android程序中表示这样的数据结构:
<?xml version="1.0" encoding="utf-8"?>
<points>
<point id="La Gioconda">
<rssi id="north">-55</rssi>
<rssi id="east" >-76</rssi>
<rssi id="south">-64</rssi>
<rssi id="east" >-92</rssi>
</point>
<point id="La Pietà">
<rssi id="north">-51</rssi>
<rssi id="east" >-60</rssi>
<rssi id="south">-88</rssi>
<rssi id="east" >-59</rssi>
</point>
</points>
Run Code Online (Sandbox Code Playgroud)
下面我报告我使用的Points,Point和Rssi类,得到这个错误:
05-03 07:49:19.884: DEBUG/com.marcos.training.TrainingActivity(354): org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Element(data=false, name=, required=true, type=void) on field 'dbm' protected java.lang.Integer com.marcos.training.Rssi.dbm for class com.marcos.training.Rssi at line 4
Run Code Online (Sandbox Code Playgroud)
我肯定会错过一些明显的东西...... :-(
File Points.java:
package com.marcos.training;
import java.util.List;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@Element
public class Points {
@ElementList(inline=true)
private List<Point> list;
public …Run Code Online (Sandbox Code Playgroud) 我目前正在使用SimpleXML框架来解析XML文件,我正面临一个经常出现的问题.
收到的XML可以是这样的:
<root>
<B>
...
</B>
</root>
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
<root>
<C>
...
</C>
</root>
Run Code Online (Sandbox Code Playgroud)
我希望B和C扩展另一个类,比如A.
使用SimpleXML这样做的整洁方法是:
@Root(name="root")
class Root {
@Element(name="B", required="false")
private B b;
@Element(name="C", required="false")
private C c;
}
class B extends A {
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以做一些我在SimpleXML文档中找到的东西,改变我的XML格式:
<root>
<A class="example.B"> // or "example.C"
...
</A>
</root>
Run Code Online (Sandbox Code Playgroud)
然后我的Java类:
@Root(name="root")
class Root {
@Element(name="A")
private A a;
}
class B extends A {
}
class C extends A {
}
Run Code Online (Sandbox Code Playgroud)
我真的很喜欢使用这个解决方案,但我不确定是否要在解析它之前完成在客户端更改XML的过程.问题是它无法在服务器端完成,因为我无法控制它.
所以我的问题是:
这是我唯一的解决方案吗?
在这种情况下,你们知道是否有一个快速的解决方案来改变客户端的xml文件?
我正在尝试使用kotlin中的simplexml解析rss feed.
返回的数据具有以下结构:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Top Audio Podcasts</title>
<link>https://rss.itunes.apple.com/api/v1/us/podcasts/top-podcasts/all/10/explicit.rss</link>
<lastBuildDate>Fri, 13 Jul 2018 01:36:19 -0700</lastBuildDate>
<atom:link rel="self" type="application/rss+xml" href="https://rss.itunes.apple.com/api/v1/us/podcasts/top-podcasts/all/10/explicit.rss"/>
<atom:link rel="alternate" type="text/html" href="https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?genreId=26&popId=28"/>
<description>iTunes Store : Top Audio Podcasts</description>
<category>iTunes Store</category>
<copyright>Copyright © 2018 Apple Inc. All rights reserved.</copyright>
<item>
<title>The Wilderness - Crooked Media</title>
<category domain="">Crooked Media</category>
<link>https://itunes.apple.com/us/podcast/the-wilderness/id1408796715?mt=2</link>
<guid>https://itunes.apple.com/us/podcast/the-wilderness/id1408796715?mt=2</guid>
<description>The Wilderness</description>
<category>podcast</category>
<category>News & Politics</category>
<category>Podcasts</category>
<category>Society & Culture</category>
<category>History</category>
<pubDate>Fri, 6 Jul 2018 00:00:00 +0000</pubDate>
</item>
<item>
<title>Aaron Mahnke's …Run Code Online (Sandbox Code Playgroud) 问题:
如何在使用Simple框架时从序列化的XML中消除不必要的空格字符?
细节:
让我们从Simple框架网站上考虑这个非常基本的例子.XML输出是:
<example index="123">
<text>Example message</text>
</example>
Run Code Online (Sandbox Code Playgroud)
如何指示序列化程序输出?
<example index="123"><text>Example message</text></example>
我检查了org.simpleframework.xml.stream.Style界面,但它似乎只能处理单个元素和属性名称而不是内容.
simple-framework ×11
java ×7
android ×6
xml-parsing ×3
kotlin ×2
xml ×2
converter ×1
enums ×1
inheritance ×1
mapping ×1
new-operator ×1
retrofit ×1
retrofit2 ×1
rss ×1
whitespace ×1