2

アクティビティでXMLDOMパーサーを使用していますが、CDATA値を使用してXMLを解析する必要があります。DOMパーサーはプレーンXMLで完全に正常に機能しますが、データにCDATA値が含まれている場合は機能しません。

解析する必要のあるXMLファイルは次のようなものです。

<?xml version="1.0" encoding="utf-8"?>
<organizations>
  <organization>
    <name><![CDATA[Center for Maximum]]></name>
    <image><![CDATA[https://www.xyz.com/company_placeholder.png]]></image>
    <city><![CDATA[Austin]]></city>
    <state><![CDATA[Texas]]></state>
  </organization>
</organizations>

オブジェクトに追加setCoalescing(true)しましたDocumentBuilderFactoryが、それでも正しく解析されていません。エラーが発生していますjava.net.MalformedURLException: Protocol not found:。前もって感謝します。

4

2 に答える 2

4

この問題に対して私が見つけた唯一の解決策は、さまざまなアイテム値を解析するためにXPATHを使用することです。たとえば、上記のXMLコードの「名前」項目を解析する必要がある場合は、次のことを行う必要があります。

    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(url); // getting XML from URL

    Document doc = parser.getDomElement(xml); // getting DOM element

    XPath xPath = XPathFactory.newInstance().newXPath();
    String name = null;
    try {
        name=xPath.evaluate("//organization/name/text()", doc).trim();
    } 
    catch (XPathExpressionException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

これで、文字列nameにはアイテム「name」の目的の値が含まれます。これは、CDATAを解析するためにコードで使用した回避策です。お役に立てれば。

于 2012-09-25T03:38:52.780 に答える
1

アクティビティでXMLDOMパーサーを使用していますが、CDATA値を使用してXMLを解析する必要があります。CDATAコンテンツを解析するには、要素でgetTextContentを試すことができ、CDATAタグ内のデータを取得できるようになります。

 NodeList nodeListGetName = doc.getElementsByTagName("name");
 Element eleName = (Element) nodeListGetName.item(0);
 String strName = eleName.getTextContent();

上記のコードでは、<name>ノードのデータを解析しました。他のCDATAコンテンツの解析にも同じパターンを使用できます。

于 2017-10-27T17:09:55.937 に答える