【问题标题】:Jquery XML traversing filter date rangeJquery XML遍历过滤器日期范围
【发布时间】:2015-03-05 11:46:00
【问题描述】:

我试图在 XML 文件中查找多个节点,这些节点具有节点属性 ex。像 position[validFromDate=2015-01-05] 并且日期在两个日期的范围内(30 天窗口)。此外,我需要有一个逻辑操作数 OR,如“选择节点 IF position isPrimaryPosition attribute = true OR position validFromDate (date) is between date1 and date2.

非常清楚:isPrimaryPosition=true OR (date1 > validFromDate

XML 文件的相关部分如下所示:

<positions>
<position isPrimaryPosition="true" validFromDate="2015-06-20">
<position isPrimaryPosition="false" validFromDate="2015-01-19">
<position isPrimaryPosition="false" validFromDate="2015-06-20">
<position isPrimaryPosition="true" validFromDate="2015-01-19">
<position isPrimaryPosition="false" validFromDate="2015-01-19">
<position isPrimaryPosition="false" validFromDate="2015-06-20">
</positions>

我现在正在处理的代码是这样的,但我不知道如何在日期之间进行逻辑选择或与 isPrimaryPosition 进行选择:

$ansettelse = $(this).find('position[isPrimaryPosition=true],position[validFromDate=2015-01-05]')   
  $ansettelse.each(function() {             
    $stillingskategori  = $(this).parent().siblings('category').attr('id');
    $ansattnummer       = $(this).parent().siblings('employeeId').text();
    $ansettelsesprosent = $(this).parent().siblings('employmentPercentage').text();
});

我希望得到一些帮助,为我指明正确的方向。

【问题讨论】:

  • 你如何从 xml 文件中获取节点?你在把它们放进去吗?你在使用 json 对象吗? xml数据是js端的字符串吗?
  • 我正在使用 Ajax 调用来获取 XML
  • var $person = $(xml).find('person:has(ssn:contains('+ $('#fld_socialsecurity').val().replace(/\./g, "") +'))');然后 $person.each(function() {
  • 我在日期之间的第二部分苦苦挣扎。另外,我不确定您是在寻找 [3] 之类的职位还是价值?
  • 感谢 Demodave 的努力,我只是想让舒尔只包括日期在范围内的节点。价值观不重要,立场也不重要。

标签: jquery xml date date-range jquery-traversing


【解决方案1】:

我将分两部分回答这个问题

非常清楚:第 1 部分 [isPrimaryPosition=true] 第 2 部分 [OR (date1 > validFromDate

第 1 部分 - 测试:isPrimaryPosition=true

var value = $(xml).find("position[isPrimaryPosition=true]"); // <-- Get the value here

第 2 部分 - 测试:OR (date1 > validFromDate

var date1 = '2015-01-19';
var date2 = '2015-01-20';

// Since we are doing OR, If the 1st isPrimaryPosition=true doesn't exist reset value
if(value.length == 0) // <-- Test for the value here
{
   // Add a filter to the position then return test
   value = $(xml).find('position').filter(function() {

       var validFromDate = $(this).text();

       // I think your test is wrong date1 > validFromDate < date2
       // I think it should be date1 < validFromDate < date2 because you are doing range
       // value between to date fields I believe

       return date1 < validFromDate && validFromDate < date2;
   });
}

value.each(function () {

// This is just to spit out a value
$(".main").append($(this).find("date").text() + "<br />"); 

}); 

<div class="main">

</div>

我添加了一个日期标签只是为了查看 xml 的值

<?xml version="1.0" encoding="UTF-8"?>
<positions>
    <position isPrimaryPosition="true" validFromDate="2015-06-20"><date>2015-06-20</date>
    </position>
<position isPrimaryPosition="false" validFromDate="2015-01-19"><date>2015-01-19</date>
    </position>
<position isPrimaryPosition="false" validFromDate="2015-06-20"><date>2015-06-20</date>
    </position>
<position isPrimaryPosition="true" validFromDate="2015-01-19"><date>2015-01-19</date>
    </position>
<position isPrimaryPosition="false" validFromDate="2015-01-19"><date>2015-01-19</date>
    </position>
<position isPrimaryPosition="false" validFromDate="2015-06-20"><date>2015-06-20</date>
    </position>
</positions>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多