0

XML ドキュメントに一致する正規表現を作成しようとしています。xml パーサーをすぐに使用しない理由は、ファイルに複数の xml ファイル (整形式かどうかにかかわらず) が含まれている可能性があるためです。

xml 構造:

<company>
    .....
    <Employees>
    .......
    </Employees>
</company>

コード

    final String xmlString = "...";
    final List<String> data = new ArrayList<String>();
    try
    {
        final Pattern pattern = Pattern.compile("<company>(.+?)</company>", Pattern.DOTALL);
        final Matcher matcher = pattern.matcher(xmlString);
        while (matcher.find())
        {
            final Pattern pattern1 = Pattern.compile("<Employees>(.+?)</Employees>", Pattern.DOTALL);// "+?"
            final Matcher matcher1 = pattern1.matcher(matcher.group(1));
            if (matcher1.find())
            {
                data.add(matcher1.group(1));
            }
        }
    }
    catch (final Exception e)
    {

    }

これは、xml 文字列に整形式または整形式でない xml 文字列が 1 つ含まれている場合に正常に機能します。ただし、整形式の xml の後に整形式の xml が続く場合、これは機能しません。

<company>
    <Employees>

   </Employees>
<company>
    .....
    <Employees>
    .......
    </Employees>
</company>

このシナリオでは、整形式の xml よりも文字列全体を返します。

助けてくださいありがとう!!

4

2 に答える 2

0

XML に似ている言語を解析していますが、まったく同じではありません。

したがって、最初に行う必要があるのは、その言語の文法を指定することです: パーサーはどの構造を受け入れるのでしょうか?

次に、パーサーを作成する必要があります。ほぼ確実に、言語の文法は再帰的になります。つまり、正規表現の構文解析能力を超えています。JavaCC などのツールを使用してパーサーを作成できる場合があります。

しかし、あなたはいくつかの読書をする必要があります。正規表現を使用してこの作業を行おうとしている場合、これは、取り組んでいる問題の背後にある基本的なコンピューター サイエンスを認識していないことを示唆しています。あなたが頭の良いハッカーなら、ほとんどの入力ドキュメントで機能するものをノックアップできるかもしれませんが、理論を理解して適用しない限り、次のドキュメントで失敗するリスクが常にあります。

于 2013-07-01T17:24:53.980 に答える