如何在JAVA中获取XPath查询结果的父节点

时间:2015-05-06 12:34:52

标签: java xml xpath

我在java中使用javax.xml.parsers.DocumentBuilder。 鉴于这样的标记:

 <?xml version="1.0" encoding="utf-8"?>
    <calendar>
        <endfiscalyear month="12" dayofmonth="28" />
        <year yr="2014">
          <event month="12" dayofmonth="24">
            <p>Dividendenauszahlung</p>
            <en>dividend payment</en>
          </event>
        </year>
        <year yr="2015">
          <event month="2" dayofmonth="1">
            <p>Hauptversammlung</p>
            <en>general meeting</en>
          </event>
           <event month="5" dayofmonth="2">
            <p>Hauptversammlung</p>
            <en>general meeting</en>
          </event>
          <event month="8" dayofmonth="21">
            <p>Ergebnis 2.Quartal</p>
            <en>1st quarter results</en>
          </event>
        </year>
      </calendar>

现在我感兴趣的是只获得过去的一年,一个月和一个月,最后一次是“大会”,在这个面具中应该是年@ yr = 2015,<event month="4" dayofmonth="21">。我可以分别获得年,月和日,但是当我尝试时,它们都没有显示出来。 首先,我喜欢任何一年:我尝试的两种方式是:

//*@yr[event/en='general meeting']   

/calendar/year[event/en='general meeting']@yr 

但没有一个是正确的。 你想怎么解决这个问题?

1 个答案:

答案 0 :(得分:1)

目前还不清楚你在问什么,但有时候对尝试解决方案的评论比试图解释更容易。

以下XPath表达式有效:

/calendar/year[event/en='general meeting']/@yr

以及它的作用:

  

选择year元素,但前提是它们具有子元素event,而子元素en又具有子元素year,其文本内容为“一般会议”。在yr个元素中,选择属性 yr="2015"

对于您显示的输入文档,只有一个此类属性符合条件,因此输出将为

/**
        *   Move temp folders to their permanent places
        *
        *   $module_folder = example (violator, pnp, etc)       
        *   $folders = name of folders within module_folder
        **/
        public function move_temp_to_permanent($module_folder, $folders){
            $bool = false;

            $module_folder_path = realpath(APPPATH . '../public/resources/temps/' . $module_folder);

            $module_folder_destination_path = $_SERVER['DOCUMENT_ROOT'] . '/ssmis/public/resources/photos/' . $module_folder . '/';

            foreach($folders as $folder){
                $bool = rename($module_folder_path . '/' . $folder, $module_folder_destination_path . $folder);
            }

            return $bool;
        }

这是你的想法吗?如果没有,请显示(而不是试图解释)您希望从表达式中获得的输出 - 并解释为什么应该选择此结果。