我在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
但没有一个是正确的。 你想怎么解决这个问题?
答案 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;
}
这是你的想法吗?如果没有,请显示(而不是试图解释)您希望从表达式中获得的输出 - 并解释为什么应该选择此结果。