0

私はWebサービスの初心者ですが、経験のある人なら誰でも次のことを手伝ってください。

OMIMRESTfulWebサービスから情報を取得しようとしているクライアントを作成しています。登録後に提供された主要なOMIMを使用しています。( http://omim.org/help/api)クライアントへの接続に成功しました。また、GETメソッドを使用すると、必要なデータをDOMドキュメントにフェッチできます。さらに、DOM全体をローカルディスク上のファイルに正常に書き込むことができました。ただし、DOMで使用可能な標準の解析機能を使用してDOMを操作することはできません。

例:NodeList nl = doc.getDocumentElement()を使用してルートノードを取得し、コンソールに出力することができます。しかし、ルートノードの最初の子を出力しようとすると、予期された子ノードではなくnullが返されます。

サンプルXMLフォーム:webservices-> DOM-> file

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><omim version="1.0">
    <clinicalSynopsisList>
    <clinicalSynopsis>
    <mimNumber>100070</mimNumber>
    <prefix>%</prefix>
    </clinicalSynopsis>
    </clinicalSynopsisList>
    </omim>

以下の私のコードを見つけてください:

String path="http://api.omim.org:8000/api/clinicalSynopsis?mimNumber="+"100070"+"&include=clinicalSynopsis&format=xml&apiKey="+"<< xxxxx private key xxxxxxxxxx >> ";

                  URL url = new URL(path);

                  HttpURLConnection conn=(HttpURLConnection)url.openConnection();

                  conn.setRequestMethod("GET");

                  InputStream is = conn.getInputStream();

                  DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

                  Document doc = docBuilder.parse(is);

                  Source src= new DOMSource(doc);

                  File file = new File("d:/text.xml");

                  Result rs = new StreamResult(file);

                  TransformerFactory tmf = TransformerFactory.newInstance();

                  Transformer trnsfrmr = tmf.newTransformer();

                  trnsfrmr.transform(src, rs);

                  System.out.println("XML file is created successfully");

                  System.out.println("The root element is :: "+doc.getDocumentElement().getNodeName());


                  NodeList nl=doc.getDocumentElement().getChildNodes();

                  System.out.println("child nodelist length::"+nl.getLength());


                  System.out.println("First child node name :: "+doc.getDocumentElement().getFirstChild().getNodeName());

                  System.out.println("Last child node name :: "+doc.getDocumentElement().getLastChild().getNodeName());

私が得た出力:-XMLファイルは正常に作成されましたルート要素は:: omim child nodelist length::3最初の子ノード名::#text最後の子ノード名::#text

取得した出力では、ルートノードは「omim」であり、3つの子があります。ただし、最初と最後の子名を出力しようとするとnullを返します。同様に、getParent()、getChild()、getSibling()メソッドが機能していません。

どんな助けでも大歓迎です。

ありがとうございました、

4

2 に答える 2

0

コメントを投稿した後、回答でさらに説明したいと思いました。rootに 3 つの子ノードがある理由を尋ねる必要があります。子供は 1 人しかいないのに、なぜ 3 人なのelementclinicalSynopsisList? 最初と最後の子は、clinicalSynopsisList. 要素のみを含むことができる解析を伝えるスキーマまたは DTD がないため、ノードのコンテンツはMIXEDとして解釈されます。omni持っている場合は、コメントで言及した他のSOの質問で説明されているように、パーサーに無視できる空白を無視するように指示できます。

DOM API を直接操作してからしばらく経ちましたが、最初の子要素を要求できるとは思えません。代わりに、XPath を使用して (たとえば、ここから開始するか、SO または google を検索して) 最初の子要素に到達するか、DOM API を使用して子ノードを反復処理し、それらのノード タイプを調べることができます (テキスト ノードは無視されます)。 )

また、 Apache CXFとJAXBなどのマーシャリング テクノロジを調べて、Web サービス エンドポイントから読み取った "生の" XML を操作する必要がないようにすることもお勧めします。

于 2012-05-11T13:13:50.947 に答える