我是xpath的新手,并且从未在Java上处理过xml。我想从xml获取值。标记之前可以加上mgns1:
,也可以不加上。所以我写了这段代码:
private List<String> parse(Node node, String file) throws XPathExpressionException {
XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new NamespaceContext() {
public String getNamespaceURI(String prefix) {
return prefix.equals("mgns1") ? "urn:edeveloper.Fournisseurs1031af" : null;
}
public Iterator<?> getPrefixes(String val) {
return null;
}
public String getPrefix(String uri) {
return null;
}
});
Node node_codreg = (Node) xpath.evaluate("mgns1:CODREG", node, XPathConstants.NODE);
...
}
我尝试了一个没有mgns1:
的xml。但是在运行时我没有ListNodes!那怎么了?
编辑:
这是xml的示例:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Fournisseurs>
<JournalExtract>2</JournalExtract>
<Record>
<STATUTRECORD>S</STATUTRECORD>
<CODFOUR>148</CODFOUR>
<RAISOC></RAISOC>
<ADRFOUR></ADRFOUR>
<CPVILLE></CPVILLE>
<CODPAYS></CODPAYS>
<TELEPHONE></TELEPHONE>
<TELEX></TELEX>
<FAX></FAX>
<EMAIL></EMAIL>
<SIRET></SIRET>
<CONDPAIE></CONDPAIE>
<MODPAIE></MODPAIE>
<LIVR></LIVR>
<REMISE>0.00</REMISE>
<DEVISE></DEVISE>
<CLASSE></CLASSE>
<DELMOY>0.00</DELMOY>
<TVAIC></TVAIC>
<MOTCLE></MOTCLE>
<DTEAGR>00/00/0000</DTEAGR>
<CODREG></CODREG>
<MTMINFAC>0.00</MTMINFAC>
<MTMINFRANCO>0.00</MTMINFRANCO>
<ZL01></ZL01>
<ZL02></ZL02>
<INDQUAL></INDQUAL>
<CERTIF></CERTIF>
<DTEVALMIN>00/00/0000</DTEVALMIN>
<DTEVALMAX>00/00/0000</DTEVALMAX>
<RAISOCREGL></RAISOCREGL>
<ADRREGL></ADRREGL>
<CPVILLEREGL></CPVILLEREGL>
<PAYSREGL></PAYSREGL>
<DOMBQE></DOMBQE>
<CODEBQE></CODEBQE>
<CODGUI></CODGUI>
<COMPTE></COMPTE>
<RIB></RIB>
<TYPETVA></TYPETVA>
<IBANPAYS></IBANPAYS>
<IBANCLE>00</IBANCLE>
<IBANCOMPTE></IBANCOMPTE>
<CODEBIC></CODEBIC>
<ROUTAGECDE></ROUTAGECDE>
<ACHSYSFRTVA>false</ACHSYSFRTVA>
<URL></URL>
<REMINCPXNET>false</REMINCPXNET>
<NOTMANSYST>false</NOTMANSYST>
<PROSPECT>false</PROSPECT>
<FOUPREF>false</FOUPREF>
<FOUPPAL></FOUPPAL>
<DTEMODTRI>00/00/0000</DTEMODTRI>
<NUMDUNS></NUMDUNS>
<CODLGFOU></CODLGFOU>
<NOALIMAUTSF>false</NOALIMAUTSF>
<AUTCDECH>false</AUTCDECH>
<SEUILEPDIF>false</SEUILEPDIF>
<MTMAXCDECH>0.00</MTMAXCDECH>
<MTMAXCC>0.00</MTMAXCC>
<MTMAXCCHCT>0.00</MTMAXCCHCT>
<CP></CP>
<VILLE></VILLE>
<CPREGL></CPREGL>
<VILREGL></VILREGL>
<CAMINST>0.00</CAMINST>
<CAMAXST>0.00</CAMAXST>
<OCCASION>false</OCCASION>
<ID_EXT></ID_EXT>
<TAXE2></TAXE2>
<TAXE3></TAXE3>
<TAXE4></TAXE4>
<DTECREDEM>00/00/0000</DTECREDEM>
<BDC_ELEC>false</BDC_ELEC>
<TYPE_FORM></TYPE_FORM>
<FORMAT>0</FORMAT>
<MODE_ENV></MODE_ENV>
<MAIL_DEST></MAIL_DEST>
<ADR_FTP></ADR_FTP>
<USR_FTP></USR_FTP>
<PWD_FTP></PWD_FTP>
<PATH_DEP></PATH_DEP>
<RECEPT_AUTO>false</RECEPT_AUTO>
<PERIODICITE></PERIODICITE>
<NOCCGEN>false</NOCCGEN>
</Record>
</Fournisseurs>
答案 0 :(得分:0)
您正在寻找名为mgns1:CODREG
的元素,其中mgns1代表命名空间urn:edeveloper.Fournisseurs1031af
。
在您向我们展示的XML文档中,名称空间urn:edeveloper.Fournisseurs1031af
中没有元素。那么,为什么要期望表达式选择任何内容呢?
此外,您仅在寻找所提供的node
的直接子级,而没有告诉我们此节点是什么。也许您想寻找所有的后代,而不仅仅是直系子女?