Не удается получить текст тега, даже если задан NamespaceContext - PullRequest
0 голосов
/ 27 февраля 2019

Я новичок в xpath, и я никогда не имел дело с XML на Java.Я хочу получить значения из 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);

    ...

}

Я пытался с XML, который не имеет mgns1:.Но во время выполнения я не получаю ListNodes!Так что не так?

edit:

Вот пример 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>

1 Ответ

0 голосов
/ 27 февраля 2019

Вы ищете элементы с именем mgns1:CODREG, где mgns1 представляет пространство имен urn:edeveloper.Fournisseurs1031af.

В документе XML, который вы нам показали, в пространстве имен urn:edeveloper.Fournisseurs1031af нет элементов.Так почему вы ожидаете, что ваше выражение выберет что-нибудь?

Более того, вы ищете только прямых потомков поставляемого node, и вы не сказали нам, что это за узел.Возможно, вы хотите искать всех потомков, а не только прямых детей?

...