6

XPath を使用して特定の XML 要素を読み取り、.xml ファイルのテキスト フィールドに表示するデスクトップ アプリケーションを開発していますJFrame

これまでのところ、クラスでString変数を渡すことにするまで、プログラムはスムーズに実行されました。File

public void openNewFile(String filePath) {
    //file path C:\\Documents and Settings\\tanzim.hasan\\my documents\\xcbl.XML 
    //is passed as a string from another class.
    String aPath = filePath;

    //Path is printed on screen before entering the try & catch.
    System.out.println("File Path Before Try & Catch: "+filePath);

    try {
        //The following statement works if the file path is manually written. 
        // File xmlFile = new File ("C:\\Documents and Settings\\tanzim.hasan\\my documents\\xcbl.XML");

        //The following statement prints the actual path  
        File xmlFile = new File(aPath);
        System.out.println("file =" + xmlFile);

        //From here the document does not print the expected results. 
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        docFactory.setNamespaceAware(true);

        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(xmlFile);
        doc.getDocumentElement().normalize();

        XPath srcPath = XPathFactory.newInstance().newXPath();
        XPathShipToAddress shipToPath = new XPathShipToAddress(srcPath, doc);
        XPathBuyerPartyAddress buyerPartyPath = new XPathBuyerPartyAddress(srcPath, doc);
    } catch (Exception e) {
        //
    }
}

xmlFileを静的パスで定義すると (つまり、手動で記述すると)、プログラムは期待どおりに動作します。ただし、静的パスを記述する代わりに、パスを文字列変数として渡すとaPath、期待される結果が出力されません。

少しグーグルで調べましたが、具体的なものは見つかりませんでした。

4

3 に答える 3

1

バックスラッシュを削除するためにreplaceAll()このように使用している場合、メソッドは最初のパラメーターとして正規表現を想定しており、単一のバックスラッシュ ( としてコード化) は無効な正規表現であるため、失敗します。を使用して機能させるには、このようにバックスラッシュをダブルエスケープする必要があります (文字列用に 1 回、正規表現用に 1 回) 。path.replaceAll("\\", "/")replaceAll()"\\"replaceAll()path.replaceAll("\\\\", "/")

ただし、正規表現は必要ありません。代わりに、次のようなプレーンテキスト ベースのreplace()方法を使用します。

path.replace("\\", "/")

「replace」と「replaceAll」という名前は誤解を招くことに注意してください。「replace」は依然としてすべての出現箇所を置き換えます...「replaceAll」という名前を決めた愚か者は「replaceRegex」または同様のものを選択する必要がありました

編集

試す:

path = path.replace("\\\\", "/");
于 2012-04-14T16:16:34.137 に答える
1

組み込みのオブジェクト メソッドを使用するだけです。

System.out.println("file = "+xmlFile.toString());

以下を使用することもできます。

System.out.println("f = " + f.getAbsolutePath());

また、ファイルが存在しないという問題がある場合は、最初に確認してから続行してください。

File file = new File (aPath);
if(file.exists()) {
  //Do your work
}
于 2012-04-13T14:40:30.173 に答える
0

これに答えるには遅すぎますが...構成ファイルから「」を削除すると、つまり

    pathVariable=c:\\some\\path\\here

これではない

    pathVariable="c:\\some\\path\\here"
于 2016-04-12T19:05:58.627 に答える