【发布时间】:2013-06-02 17:53:28
【问题描述】:
当节点的属性值中包含"&&"时,XML文件无法解析。
XML 文件:
<?xml version="1.0" encoding="UTF-8" ?>
<test version="0.0.3" >
<SFTP ipaddress="12.12.12.12" port="22" uname="abc" pwd="abc&&" path="/testdev" />
</test>
当使用 pwd="abc&&" 时它会给我这样的错误,如果我不使用特殊字符而不是它的工作正常。
错误:
At line 3, column 62: not well-formed (invalid token)
org.apache.harmony.xml.ExpatParser$ParseException: At line 3, column 62: not well-formed (invalid token)
at org.apache.harmony.xml.ExpatParser.parseFragment(ExpatParser.java:515)
at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:474)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:321)
at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:279)
at com.test.bl.ConfigurationParser.parseFile(ConfigurationParser.java:61)
at com.test.ui.LoginActivity$ConfigurationXMLParseOperation.doInBackground(LoginActivity.java:209)
at com.test.ui.LoginActivity$ConfigurationXMLParseOperation.doInBackground(LoginActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:856)
代码:
public void parseFile(final InputStream inputStream) throws ParserConfigurationException,
SAXException, IOException {
try {
final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
final SAXParser saxParser = saxParserFactory.newSAXParser();
final XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(this);
xmlReader.parse(new InputSource(inputStream));
} catch (ParserConfigurationException e) {
Logger.e(TAG, e.getMessage(), e);
} catch (SAXException e) {
Logger.e(TAG, e.getMessage(), e);
} catch (IOException e) {
Logger.e(TAG, e.getMessage(), e);
}
}
@Override
public void startElement(final String uri, final String localName, final String qName,
final Attributes attributes) throws SAXException {
mElementStart = true;
if (localName.equals(null)) {
Logger.i(TAG, "Devices xml file is empty");
}
tempValue = "";
if (localName.equalsIgnoreCase(mSFTPParseNodeString)) {
sftpConfiguration = new SFTPConfiguration();
sftpConfiguration.mSftpIp = attributes.getValue(mSFTPIpParseNodeString);
sftpConfiguration.mRemotePath = attributes.getValue(mSFTPPathParseNodeString);
sftpConfiguration.mSftpPort = Integer.parseInt(attributes
.getValue(mSFTPPortParseNodeString));
sftpConfiguration.mUserName = attributes.getValue(mSFTPUserNameParseNodeString);
sftpConfiguration.mUserPassword = attributes.getValue(mSFTPPasswordParseNodeString);
}
}
请帮助我并给我解决方案我如何解析这个值并在我的代码中使用。
谢谢
【问题讨论】:
-
在 XML 中“&”必须编码为“&”。
-
您应该使用 XML 或 HTML 编码函数对所有值进行编码。我不建议只更正 & 值,因为它们还有其他几个值,例如 、&、'。查看此 wiki 链接以查看 XML 和 HTML 的不同类型的字符和转义序列:en.wikipedia.org/wiki/…
-
@Kyle:谢谢,已添加到 anwser :)
标签: java android xml-parsing sax