2013-09-27 2 views
0

Я пытаюсь получить доступ к XML-файлу с dom4j. Я также пробовал через dom of org.w3c, но это не удалось таким же образом. У меня есть образец файла xml, который я пытаюсь прочитать ниже. Я пытаюсь прочитать атрибут xlink: href из locator элемента, но по какой-то причине это всегда терпит неудачу. Когда я пытаюсь использовать те же методы в простом XML-файле, я пишу сам, он работает. Я работаю над этим уже несколько дней. Вот мой метод:XPath search не работает

File file = new File("schemas/pfs-2013-04-01-presentation.xml"); 
      SAXReader reader = new SAXReader(); 
      Document document = reader.read(file); 
      XPath xpath = document.createXPath("//loc"); 
      Map uris = new HashMap(); 
      uris.put("", "http://www.xbrl.org/2003/linkbase"); 
      uris.put("xbrli","http://www.xbrl.org/2003/instance"); 
      uris.put("xlink","http://www.w3.org/1999/xlink"); 
      uris.put("xsi","http://www.w3.org/2001/XMLSchema-instance"); 

      xpath.setNamespaceURIs(uris); 

      List<Node> nodes = xpath.selectNodes(xpath); 

Из этих «узлов» я хочу прочитать атрибуты позже. Однако, когда я выполняю это, список пуст. Это что-то не понимает.

Может ли кто-нибудь помочь мне с этим, пожалуйста? благодаря

<?xml version="1.0" encoding="UTF-8"?> 
<linkbase xmlns="http://www.xbrl.org/2003/linkbase" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.xbrl.org/2003/linkbase http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd" xmlns:presentationAttribute="http://www.nbb.be/be/fr/pfs/presentationAttribute" > 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullIdentifyingData" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullIdentifyingData"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullBalanceSheet" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullBalanceSheet"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullIncomeStatement" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullIncomeStatement"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullAppropriationsWithdrawings" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullAppropriationsWithdrawings"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullDisclosures" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullDisclosures"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullSocialBalanceSheet" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullSocialBalanceSheet"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullValidationRules" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullValidationRules"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullManagementReport" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullManagementReport"/> 
    <roleRef roleURI="http://www.nbb.be/be/fr/pfs/ci/role/FullAccountantsReport" xlink:type="simple" xlink:href="pfs-full-2013-04-01.xsd#FullAccountantsReport"/> 
<presentationLink xlink:type="extended" xlink:role="http://www.nbb.be/be/fr/pfs/ci/role/FullIdentifyingData"> 
    <loc xlink:type="locator" xlink:href="pfs-2013-04-01.xsd#pfs_IdentifyingData" xlink:label="IdentifyingData_1" /> 
    <loc xlink:type="locator" xlink:href="pfs-gcd-2013-04-01.xsd#pfs-gcd_GlobalCommonDocument" xlink:label="GlobalCommonDocument_2" /> 
    <loc xlink:type="locator" xlink:href="pfs-gcd-2013-04-01.xsd#pfs-gcd_EntityInformation" xlink:label="EntityInformation_3" /> 
    <loc xlink:type="locator" xlink:href="pfs-gcd-2013-04-01.xsd#pfs-gcd_EntityName" xlink:label="EntityName_4" /> 
    <loc xlink:type="locator" xlink:href="pfs-gcd-2013-04-01.xsd#pfs-gcd_EntityCurrentLegalName" xlink:label="EntityCurrentLegalName_5" /> 
+0

Вы уверены, что можете установить пустой префикс? В XPath он представляет собой пространство имен «no URI», любое другое пространство имен должно иметь префикс. – choroba

ответ

0

Поскольку вы не используете пространство имен по умолчанию, XPath не знает, как найти свой «LOC» узлов. Вам нужно будет префикс ваших «loc» узлов и обновить правильное пространство имен для использования с одним и тем же префиксом. См. Это для получения дополнительной информации: XPath and Default Namespace handling