javaの一部のXMLの解析に少し問題があります。私のXMLファイルは正しく読み込まれており、ノードのgetTextContent()関数を使用して、問題なくファイルから大部分の情報を得ることができます(xmlスニペットに表示されているStreamTypeノード)。java - getTextContent()とgetNodeValue()のxmlの解析では n、 t、および空白のみが返されます
しかし、ノードの子を扱おうとすると、getNodeValue()とgetTextContent()の両方がこのランダム値「\ n \ t \ t」を返します。
NodeListプロパティのNodeNodesが正しく設定されているようです(18個の「Property」要素がすべて含まれています)。
ここに私のコードからの抜粋です:
Document document;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(appXML);
...
String typeName = document.getElementsByTagName("StreamType").item(0).getTextContent();
...
String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
int nodelistlength = propertyNodes.getLength();
for (int i = 0; i < nodelistlength; i++) {
Node currentNode = propertyNodes.item(i);
Node nameNode = currentNode.getFirstChild();
Node valueNode = currentNode.getLastChild();
String name = nameNode.getNodeValue();
String value = valueNode.getNodeValue();
if (nameNode.getTextContent().equalsIgnoreCase("maxConnections"))
limit = valueNode.getTextContent();
}
そして、ここでは、私が解析しようとしているXMLからいくつかの切れ端です:
<Root>
<Application>
<Streams>
<StreamType>live</StreamType>
...
</Streams>
...
<Properties>
...
<Property>
<Name>maxConnections</Name>
<Value>1000</Value>
</Property>
...
</Properties>
</Application>
</Root>
私はここで間違っているかもしれないものの任意のアイデアは?どうもありがとう!
編集:@homeさんが投稿したチュートリアルのおかげで、今動作します。これは私が、コードを固定する方法である:からこの便利な機能を追加しました)
String limit = "-1";
NodeList propertyNodes = document.getElementsByTagName("Property");
for (int i = 0; i < propertyNodes.getLength(); i++) {
Node currentNode = propertyNodes.item(i);
if (currentNode.getNodeType() != Node.ELEMENT_NODE)
continue;
Element currentElement = (Element)currentNode;
if (getTagValue("Name",currentElement).equalsIgnoreCase("maxConnections"))
limit = getTagValue("Value",currentElement);
}
2:
1)「文字列の制限」で始まり、ループのエンドブラケット用で終わるコードのブロックを修正しましたチュートリアル:
private static String getTagValue(String sTag, Element eElement) {
NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
Node nValue = (Node) nlList.item(0);
return nValue.getNodeValue();
}
"Properties"要素の子の名前と値のペアを完全にフェッチします。どうもありがとう!
JAXBを使用できない理由は何ですか? – ChadNC
@home、あなたのチュートリアルは私の問題を解決し、今では私のコードが動作します!私はそれを "最高"とマークしてアップヴォートを与えることができますので、これを回答として投稿してください。本当にありがとう! :) –
@キャサリンウィリアムズ:追加された回答:-) – home