android - 解析 CDATA 标签内的 xml (Android)

标签 android xml sax cdata

我有一个关于在另一个 xml 中的 cdata 标记中解析 xml 的问题。我已经搜索过,但没有找到我的确切问题。我发布了示例:

<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:CSResponse xmlns:ns2="http://webservices....../">
      <RespuestaVentaPrepagoTituloCS1>
        <ICallId>0</ICallId>
        <IResultCode>1</IResultCode>
        <SResulXML>
        <![CDATA[null<?xml version="1.0" encoding="UTF-8"?>
          <SS_prepagoCS version="0.1" fecha="2013-11-02T06:24:42" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=".\SS_Pasdsd">
            <TTPSearchResult value="1" desc="OK">
              <TTPData xsi:nil="false">
                <SerialNumber>56676543243234</SerialNumber>
                ....

但我收到的回复是下一个:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Body>
    <ns2:CS1Response xmlns:ns2="http://webservices..../">
      <RespuestaVentaPrepagoTituloCS1>
        <ICallId>0</ICallId>
        <IResultCode>1</IResultCode>
        <SResulXML>null&lt;?xml version="1.0" encoding="UTF-8"?>&lt;SS_prepagoCS version="0.1" fecha="2013-11-13T10:12:20" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=".\SS_PrepagoCS_v0.1.xsd">  &lt;TTPSearchResult value="1" desc="OK">    &lt;TTPData xsi:nil="false">

而且我无法解析 cdata 的内容,因为 sax 解析器找不到 xml 标记。有人可以帮助我吗?

谢谢

编辑:添加了更多代码

我提出要求:

    String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + 
             "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservices.sayp.bit.crtm/\"> " + 
             "   <soapenv:Header/> " + 
             "   <soapenv:Body> " + 
             ".... ";

    String action = "";
    HttpResponse res = sendRequest(serverV2 + method, data, action);

    if (res.getStatusLine().getStatusCode() == 200) {
        HttpEntity entity = res.getEntity();
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        CSHandler handler = new CSHandler();


        parser.parse(entity.getContent()), handler);//entity.getContent
        return handler.getResponse();
    }

在某些地方,我读到为下一个代码更改 entity.getContent() 应该有效,但结果是一样的。

        HttpEntity entity = res.getEntity();
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        CSHandler handler = new CSHandler();
        String xml=EntityUtils.toString(entity);
        if (BuildConfig.DEBUG)
            Log.i("XML", xml);
        parser.parse(new InputSource(new String(xml)), handler);//entity.getContent
        return handler.getResponse();
        }

CSHandler 是一个普通的 SAX 解析器,用于搜索标签,但它找不到标签,因为 xml 已转换为 html...

最佳答案

CDATA 部分中的文本或其他形式的转义文本可能相同,但由于转义或换行而无法被解析器识别为 XML。

您需要做的是使用您的主解析器将所有这些文本放入一个字符串中,然后在至少去除字符串开头的“null”之后开始对该字符串中的 XML 进行单独的解析.

如果您发布 Java 代码来展示您当前如何解析 xml 的其余部分,我们可能会提供有关处理此问题的更详细的指导。

关于android - 解析 CDATA 标签内的 xml (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19949856/

相关文章:

Java Sax 解析器 - 在 EndElementListener 中停止处理

java - 如何在 ListView 中添加 ExpandableListView?

android - Firebase中应用程序在后台时如何处理通知

php - 看起来我们没有 XML 文档

c# - 如何在 ASP.NET CORE 中签署 XML SAML 断言

xsd - SAX 解析器不遵循引用

Android 操作按钮图标丢失

android - 房间数据库插入或更新但保留数据库字段?

android - Eclipse 在 android xml 文件中插入一个新行

java - 使用 saxon 获取远程 XML