0

私は Ajax で Spring を使用しています。Ajax を使用して、xml ファイルを読み込んで解析するコントローラー メソッドを呼び出しています。Ajax 呼び出しへの応答として、解析されたノード (オブジェクト) を html ページに渡したいと思います。

これは私の Ajax 呼び出しです

$.ajax({
        url: "query1",
        type: "POST",
        //dataType: "xml",
        success: function(data) {
            alert("in jax response");
            alert("DATA" + data);
          // parseXml(data);
        }
    }); 

これは私のコントローラーメソッドです

@RequestMapping(value = "/query1", method = RequestMethod.POST)
public @ResponseBody Node executeQuery1(ModelMap model) throws ParserConfigurationException, SAXException,IOException, XPathExpressionException {
        // Standard of reading a XML file
          DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
          factory.setNamespaceAware(true);
          DocumentBuilder builder;
          Document doc = null;
          XPathExpression expr = null;
          builder = factory.newDocumentBuilder();
          String filepath = "C:\\test.xml";
          System.out.println("PATH: " + filepath);
          doc = builder.parse(filepath);

          // Create a XPathFactory
          XPathFactory xFactory = XPathFactory.newInstance();

          // Create a XPath object
          XPath xpath = xFactory.newXPath();

        // Compile the XPath expression
          expr = xpath.compile("//person[@id=1]");
          // Run the query and get a nodeset
          Object result = expr.evaluate(doc, XPathConstants.NODE);

          // Cast the result to a DOM NodeList
          Node personNode = (Node) result;
          model.addAttribute("xmlnode", personNode);
          System.out.println("model set. going to return");
         return personNode;

    }

ノードの代わりに文字列を返すと、アラート ポップアップが表示されます。しかし、ノード オブジェクトを返すと失敗します。

また、この Node を Javascript でさらに解析したいと思います。ですので、良い方法を教えてください。Node を XML 文字列に変換して XML 文字列を返す必要がありますか?

4

2 に答える 2

0

(以前のバージョンでは、XML をクライアントからサーバーに渡すと想定していました)。

DOM ノードをそのまま渡すことはできません。メソッドを使用してシリアル化することはありませんtoString

DOM サブツリーを渡すには、それを解析解除して XML に戻す必要があります。「DOM を XML ファイルとして書き出す」の Java チュートリアル ページには、あなたがしようとしていることのほとんどを実行する例があります。「DOM のサブツリーを書き出す」という見出しを探します。(唯一の違いは、コードが DOM API ではなく XPath を使用して、必要なノードを見つけることです。)

または、DOM ツリーを走査し、コンテンツを新しい (非 DOM) オブジェクトに抽出し、それらをシリアル化することで、Node を「手動でシリアル化」することもできます。たとえば、JSONObject/JSONArray インスタンスを作成してから、JSON としてシリアル化できます。クライアント側で得られるものは XML ではありません。(それは良いことかもしれません。)

于 2013-04-23T13:05:04.890 に答える