0

XML文字列の&をチェックするメソッドを作成しました。

以下を含めるようにメソッドを変更する必要があります。

<&lt

>&gt

\&guot

&&amp

\&apos

これが方法です

private String xmlEscape(String s) {
    try {
        return s.replaceAll("&(?!amp;)", "&amp;");
    }
    catch (PatternSyntaxException pse) {
        return s;
    }
} // end xmlEscape()

これが私がそれを使っている方法です

 sb.append("            <Host>" + xmlEscape(url.getHost()) + "</Host>\n");

残りのシンボルを組み込むようにメソッドを変更するにはどうすればよいですか?

編集

質問を正しく表現してはいけないと思います。このxmlEscape()メソッドでは、次の文字の文字列を確認し < > ' " &たいのですが、見つかった場合は、見つかった文字を正しい文字に置き換えます。

例:charがある場合、charは;&に置き換えられます。&amp文字列で。

あなたは同じくらい簡単なことをすることができますか

try {
   s.replaceAll("&(?!amp;)", "&amp;");
   s.replaceAll("<", "&lt;");
   s.replaceAll(">", "&gt;");
   s.replaceAll("'", "&apos;");
   s.replaceAll("\"", "&quot;");
   return s;
}
catch (PatternSyntaxException pse) {
   return s;
}   
4

2 に答える 2

4

ApachecommonsStringEscapeUtils.escapeXmlメソッドまたは他の多くのXMLエスケープユーティリティの1つを使用することを検討することをお勧めします。これにより、ホスト名以外の何かをエスケープする必要があるときに何かを見逃すことを心配することなく、XMLコンテンツに正しくエスケープできます。

于 2012-09-24T20:18:24.730 に答える
2

または、文字列を一緒に追加するのではなく、 StAX(JSR-173) APIを使用してXMLドキュメントを作成することを検討しましたか(実装はJDK / JREに含まれています)。これにより、必要なすべての文字エスケープが処理されます。

package forum12569441;

import java.io.*;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        // WRITE THE XML
        XMLOutputFactory xof = XMLOutputFactory.newFactory();

        StringWriter sw = new StringWriter();
        XMLStreamWriter xsw = xof.createXMLStreamWriter(sw);
        xsw.writeStartDocument();
        xsw.writeStartElement("foo");
        xsw.writeCharacters("<>\"&'");
        xsw.writeEndDocument();

        String xml = sw.toString();
        System.out.println(xml);

        // READ THE XML
        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xml));
        xsr.nextTag(); // Advance to "foo" element
        System.out.println(xsr.getElementText());
    }

}

出力

<?xml version="1.0" ?><foo>&lt;&gt;"&amp;'</foo>
<>"&'
于 2012-09-24T20:31:14.803 に答える