用命名空间读取XML文件,使用java
问题描述:
我想知道如何浏览这个XML文件以获得一些值(如VersionXSD,Support,etx ...)。没有命名空间,我可以做到这一点,但命名空间,我没有得到任何结果。用命名空间读取XML文件,使用java
<?xml version="1.0" encoding="UTF-8"?>
<ROOT Id="myRefId"
xsi:schemaLocation="urn:ir:si_my_xsd_07.xsd"
xmlns="urn:ir:se_pelmed" xmlns:nmsps="urn:siram:nmsps"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Horodatage>2013-03-05T12:00:00</Horodatage>
<VersionXSD>01.01</VersionXSD>
<BASE>
<nmsps:Numero>NUM-123-456</nmsps:Numero>
<nmsps:Type>TATA</nmsps:Type>
<nmsps:Support>PASTIS</nmsps:Support>
<nmsps:DateLimite>2013-03-04</nmsps:DateLimite>
<nmsps:Serial>0</nmsps:Serial>
<nmsps:BASEA>
<nmsps:NomFamille>Paul</nmsps:NomFamille>
<nmsps:Prenom>Hilaire</nmsps:Prenom>
<nmsps:DateNai>1979-10-11</nmsps:DateNai>
<nmsps:Sexe>Masculin</nmsps:Sexe>
</nmsps:BASEA>
<nmsps:BASEC Id="1">
<nmsps:Validite>2013-03-04</nmsps:Validite>
<nmsps:Sub>true</nmsps:Sub>
<nmsps:Stup>true</nmsps:Stup>
</nmsps:BASEC>
<nmsps:BASED Id="1">
<nmsps:Numero R="DD1">numero1</nmsps:Numero>
<nmsps:Categorie>Categorie1</nmsps:Categorie>
</nmsps:BASED>
<nmsps:BASED Id="2">
<nmsps:Numero R="DD2">numero2</nmsps:Numero>
<nmsps:Categorie>Categorie2</nmsps:Categorie>
</nmsps:BASED>
<nmsps:BASED Id="3">
<nmsps:Numero R="DD3">numero3</nmsps:Numero>
<nmsps:Categorie>Categorie3</nmsps:Categorie>
</nmsps:BASED>
</BASE>
</ROOT>
答
您可以使用旁路即local-name()
//*[local-name()='Support']
或命名实例化一个为flup建议,这是我会怎么做,这会让事情变得更加简单。
您必须为XPath提供NamespaceContext。这个类没有默认的impl,你必须自己实例化一个。请参阅http://stackoverflow.com/questions/8221652/how-to-retrieve-xml-data-using-xpath-which-contains-namespace-in-java/8221812#8221812 – flup 2013-03-13 19:37:01