如何解析 xml 并从 xml 字符串中获取数据?
Posted
技术标签:
【中文标题】如何解析 xml 并从 xml 字符串中获取数据?【英文标题】:How to parse xml and get the data from xml string? 【发布时间】:2017-07-25 07:54:48 【问题描述】:我得到一个 xml 字符串,我想解析并从中获取数据。我试图将其解析为 json,但结果是空括号。
public class ResultsActivity extends Activity
String outputPath;
TextView tv;
public static int PRETTY_PRINT_INDENT_FACTOR = 4;
public static String TEST_XML_STRING;
DocumentBuilder builder;
InputStream is;
Document dom;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
tv = new TextView(this);
setContentView(tv);
String imageUrl = "unknown";
Bundle extras = getIntent().getExtras();
if( extras != null)
imageUrl = extras.getString("IMAGE_PATH" );
outputPath = extras.getString( "RESULT_PATH" );
// Starting recognition process
new AsyncProcessTask(this).execute(imageUrl, outputPath);
public void updateResults(Boolean success)
if (!success)
return;
try
StringBuffer contents = new StringBuffer();
FileInputStream fis = openFileInput(outputPath);
try
Reader reader = new InputStreamReader(fis, "UTF-8");
BufferedReader bufReader = new BufferedReader(reader);
String text = null;
while ((text = bufReader.readLine()) != null)
contents.append(text).append(System.getProperty("line.separator"));
finally
fis.close();
XmlToJson xmlToJson = new XmlToJson.Builder(contents.toString()).build();
// convert to a JSONObject
JSONObject jsonObject = xmlToJson.toJson();
// OR convert to a Json String
String jsonString = xmlToJson.toString();
// OR convert to a formatted Json String (with indent & line breaks)
String formatted = xmlToJson.toFormattedString();
Log.e("xml",contents.toString());
Log.e("json",jsonObject.toString());
catch (Exception e)
displayMessage("Error: " + e.getMessage());
public void displayMessage( String text )
tv.post( new MessagePoster( text ) );
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_results, menu);
return true;
class MessagePoster implements Runnable
public MessagePoster( String message )
_message = message;
public void run()
tv.append( _message + "\n" );
setContentView( tv );
private final String _message;
我点击了这个链接:https://github.com/smart-fun/XmlToJson
我只能解析 xml 吗?如何从 xml 字符串中获取数据?
下面是xml字符串:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" xmlns="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd">
<businessCard imageRotation="noRotation">
<field type="Mobile">
<value>•32147976</value>
</field>
<field type="Address">
<value>Timing: 11:00 a.m. to 5.00 p.m</value>
</field>
<field type="Address">
<value>MULTOWECIALITY HOSPITAL Havnmg Hotel MwyantfwfMf), TOL: 1814 7»7» / 0454 7575 fax: 2514 MSS MtoMte t wvHwJaMtur0Mapttal.com</value>
</field>
<field type="Name">
<value>M. S. (Surgery), Fais, Fics</value>
</field>
<field type="Company">
<value>KASTURI MEDICARE PVT. LTD.</value>
</field>
<field type="Job">
<value>Consulting General Surgeon Special Interest: Medical Administrator: KsturiSecretary: IMA - Mira</value>
</field>
<field type="Text">
<value>Mob.: •32114976
Dr. Rakhi R
M. S. (Surgery), Surgeon
Special Interest: Medical
President: Bhayander Medical Association
Scientific Secretary: IMA - Mira Bhayander
Timing: 11:00 a.m. to 5.00 p.m
%
*
KASTURI MEDICARE PVT. LTD.
ISO 9001:2008 Certified, ASNH Cliniq 21 Certified,
MtoMte t wvHwJaMtur0Mapttal.com
mkhLkasturi0gmoiH.com</value>
</field>
</businessCard>
我检查了这个链接来解析 xml:http://androidexample.com/XML_Parsing_-_Android_Example/index.php?view=article_discription&aid=69
但是这个字符串没有列表,我不知道如何解析这个 xml 字符串。有人可以帮忙吗??谢谢。。
【问题讨论】:
我会给你建议,把它转换成Json,然后解析JsonObject。这比解析 XML 容易。 在android中使用XML PullParser解析XML。 这是一个关于使用 Json 解析数据的完整示例,它可能会有所帮助:androidhive.info/2014/07/… 【参考方案1】:你可以比XML
更容易地解析Json
。
所以我会建议你解析Json,
首先将XML
转换为Jso
n,然后解析JsonObject
。
这里是您可以逐步将 XML 转换为 JSON 的参考
https://***.com/a/18339178/6676466
【讨论】:
我试过这个,结果是空括号。 我已经测试过这段代码。它对我来说很完美...您的 xml 数据会有问题..您可以发布您的 xml 数据...吗? 知道了,谢谢.. 你能帮忙解决这个问题吗? ***.com/questions/42612426/… 我很高兴,:) @Sid 我已经回答了您的上述问题。请检查。 ***.com/a/42618406/6676466【参考方案2】:对于 Xml 解析,您可以选择 XML Pull Parser 或 XML DOM Parser。 这两个过程都相当冗长,并且涉及大量代码,因为它侧重于手动解析 XML。
另一种方法是在您的项目中使用This Library,然后您的大部分工作就完成了。它将解析您的 XML,就像您使用 GSON 解析 JSON 一样。 您需要做的就是创建解析器的一个实例并像这样使用它:
XmlParserCreator parserCreator = new XmlParserCreator()
@Override
public XmlPullParser createParser()
try
return XmlPullParserFactory.newInstance().newPullParser();
catch (Exception e)
throw new RuntimeException(e);
;
GsonXml gsonXml = new GsonXmlBuilder()
.setXmlParserCreator(parserCreator)
.create();
String xml = "<model><name>my name</name><description>my description</description></model>";
SimpleModel model = gsonXml.fromXml(xml, SimpleModel.class);
请记住,您需要为响应创建一个 POJO 类,就像为 GSON 所做的那样。
使用以下方法将库包含在您的 gradle 中:
compile 'com.stanfy:gson-xml-java:0.1.+'
请仔细阅读库的 github 链接以了解用法和限制。
【讨论】:
【参考方案3】:从您的问题中,我没有得到将 xml 转换为 json 的理由,而只是为了获得一种直接从 xml 中获取某些字段的方法。
如果后续步骤不需要处理 json 数据,我建议您使用 XPATH。使用 Xpath,您可以通过简单的路径查询(例如“/document/businessCard/field[@type='Mobile']/value”)获取 xml 的数据
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(URI_TO_YOUR_DOCUMENT);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile("/document/businessCard/field[@type='Mobile']/value");
【讨论】:
我怎样才能得到这个字符串?以上是关于如何解析 xml 并从 xml 字符串中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何单击元素并从链接的 xml 文件(python)中解析文本?