XMLファイルを受け取るサービスを構築しようとしています。しかし、人々はそれを送信し、時には名前空間を使用することもあります。JavaとXML:名前空間の有無にかかわらずXMLタグを読み取る
<?xml version="1.0" encoding="UTF-8"?>
<ds:EnvioDoc version="1.0" xmlns:ds="http://my.domain">
<ds:Cabecera version="1.0">
<ds:IdRec>215217190015</ds:IdRec>
<ds:IdEm>211003420017</ds:IdEm>
<ds:IdDoc>2995019</ds:IdDoc>
</ds:Cabecera>
<Cuerpo>
<CorpDoc version="1.0" xmlns="http://my.domain" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<body>
<Fecha>2016-08-12T00:11:50-03:00</Fecha>
[..]
など来ることができる:例えば
File edocFile = new File(fileName);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(edocFile);
//recomendado http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
NodeList nlCabecera = doc.getElementsByTagNameNS("*","Cabecera");
Node cabeceraNode = nlCabecera .item(0);
if (cabeceraNode.getNodeType() == Node.ELEMENT_NODE) {
をしかし、もし行のNullPointerExsceptionを取得:
<?xml version="1.0" encoding="UTF-8"?>
<EnvioDoc version="1.0" xmlns="http://my.domain">
<Cabecera version="1.0">
<IdRec>215217190015</IdRec>
<IdEm>211003420017</IdEm>
<IdDoc>2995019</IdDoc>
</Cabecera>
<Cuerpo>
<CorpDoc version="1.0" xmlns="http://my.domain" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<body>
<Fecha>2016-08-12T00:11:50-03:00</Fecha>
[..]
私たちは、このファイルを読むためにこのコードを使用しようとしました。
いずれかをお勧めしますか?
TIA
名前空間で作業する場合は、まず 'dbFactory.setNamespaceAware(true); 'を設定します。 –
また、両方のサンプルが同じ名前空間を使用し、2番目のサンプルの既定の名前空間としてのみ使用され、最初のサンプルにはプレフィックスが付きます。 –
ありがとう!それは今働いている! – user1748166