私は、XMLファイルからのコメントの読み込みしようとすると、それがループを通過する際、コメントの要素の両方からは、二度印刷されています。それは最初の反復と次の反復の2番目の要素のコメントの最初の要素のコメントを印刷する必要があります。それが明確でない場合は、私が参照するために期待される出力と実際の出力を添付しています。
XML Code:
<shipments>
<shipment id="011">
<department>XXXX</department>
<!-- Product: XXXXX-->
</shipment>
</shipments>
コード:
public class Main {
public static void main(String[] args) throws SAXException,
IOException, ParserConfigurationException, XMLStreamException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// Ignores all the comments described in the XML File
factory.setIgnoringComments(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new File("Details.xml"));
doc.getDocumentElement().normalize();
NodeList ShipmentList = doc.getElementsByTagName("shipment");
for (int i = 0; i < ShipmentList.getLength(); i++)
{
Node node = ShipmentList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE)
{
Element eElement = (Element) node;
XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream("shipmentDetails_1.xml"));
while (xr.hasNext()) {
if (xr.next() == XMLStreamConstants.COMMENT) {
String comment = xr.getText();
System.out.print("Comments: ");
System.out.println(comment);
} }
}
}
}
}
予想される出力:
コメント:製品:ノートPC
コメント:製品:携帯電話
私は取得していますどのような出力:
コメント:製品:ノートパソコンの
コメント:製品:携帯電話
コメント:製品:ノートパソコンの
コメント:製品:携帯電話
XML宣言から値を取得するには、上の次のメソッドを呼び出しますDocument
:
getXmlEncoding()
-属性がの一部として、指定するXML宣言、このドキュメントのエンコーディング。これは、あるnull
時に指定されていない場合、またはそれは、そのようなときのように、知られていないDocument
メモリ内に作成されました。getXmlStandalone()
-属性がの一部として、指定するXML宣言、この文書がスタンドアロンであるかどうか、。これは、あるfalse
とき、不特定。getXmlVersion()
-属性がの一部として、指定するXML宣言、このドキュメントのバージョン番号。そこには、宣言されていないとした場合、この文書が「XML」機能をサポートしている場合、値です"1.0"
。
更新しました
見つけて、内部のコメントを印刷するには<shipment>
要素とタイプのノードのための見た目の子ノードを、要素反復をCOMMENT_NODE
、それをキャストしComment
て、の値を印刷しますgetData()
。
for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
if (child.getNodeType() == Node.COMMENT_NODE) {
Comment comment = (Comment) child;
System.out.println("COMMENTS : " + comment.getData());
}
}
明確にする:node
ここで使用される質問コードからです。また、使用することができますeElement
代わりにnode
。違いはありません。