2017-10-09 25 views
0

を含む文字列を解析した後、nullである:XMLドキュメントは、私はこのようなXML文書を持っているXML

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="/resources/transform.xslt"?> 
<map name="response"> 
    <prop name="numConsumers">87</prop> 
    <prop name="numOutEventsQueued">17</prop> 
    <prop name="numOutEventsUnAcked">2131</prop> 
    <prop name="numOutEventsSent">538108577</prop> 
</map> 

(私は文字列として応答を取得するので、私はXMLにそれを解析し、numConsumersを抽出しよう値87):

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder; 

     builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(xml))); 

     NodeList nodeList = doc.getChildNodes(); 
     for(int i = 0; i < nodeList.getLength(); i++) { 
      String numConsumers = nodeList.item(i).getTextContent(); 
     } 

しかし、事はi = 0numConsumerstype="text/xsl" href="/resources/transform.xslt"とするときi = 1あるとき、ある、それが連結された、子ノードのすべての値です。私は間違って何をしていますか?私は、現在のコードが明示的に私が望むノードを探しているわけではないことを知っていますが、この時点で私はノードに到達できるかどうかを確認しようとしています。

+1

おそらく '<?xml-stylesheet>'属性を読み込んでいるだけでしょうか。最初に完全なXMLを読む方法についてのチュートリアルに従ってください。最初は難しいかもしれない。ここでは良いスタートです[Java XML](https://docs.oracle.com/cd/B28359_01/appdev.111/b28394/adx_j_parser.htm#ADXDK3000) – AxelH

答えて

1
NodeList nodeList = doc.getChildNodes(); 

XML DOMではすべてがノードです。あなたのケースの文書には、文書レベルで宣言ノード( 'xml-stylesheet')と文書要素( 'map')の2つのノードがあります。パーサーの設定によっては、文書要素の前後に空白(スキーマはありませんが、それが許されています)があれば、それはあります。あなたがであるかを取得する方法の

一つ下にされています。

NodeList nodeList=doc.getDocumentElement().getElementsByTagName("prop"); 
for(int i=0;i<nodeList.getLength();i++{ 

String number=nodeList.item(i).getFirstChild().getNodeValue(); 

} 

お知らせ.getFirstChild()GETNODEVALUE()、XML DOMにすべてが要素ノードのノード、内部コンテンツですノードの値ではなく、ノードの最初の子であり、最初の子の値は '87'または他の値です。

+0

ありがとうございますが、私は ' name = "" '各子ノードの名前?それ以外の場合は、正しい値が見つかった時点を判断することが難しくなります。 – Khaine775

+1

確かに、Node to Element(https://docs.oracle.com/javase/7/docs/api/org/w3c/dom/Element.html)ノードをキャストし、getAttribute( "name")を使用してください – Ironluca

関連する問題