XML文件节点属性在具有特殊字符时未解析

sam*_*m_k 1 java android sax xml-parsing

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>
Run Code Online (Sandbox Code Playgroud)

什么时候使用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)
Run Code Online (Sandbox Code Playgroud)

代码:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

请帮助我并给我解决方案如何解析此值并在我的代码中使用.

谢谢

Ocu*_*cuS 5

在XML中,所有&字符必须编码为&amp;.

因此,无论文件来自何处,您都必须在尝试解析XML之前更改这些字符.

同样的:

  • <&lt;
  • >&gt;

请参阅XML和HTML字符实体引用列表.