문제

다음과 같은 XML 객체가있는 경우 :

    <a>
    <u date="2009-04-10" value="543"/>
    <u date="2009-04-11" value="234"/>
    <u date="2009-04-13" value="321"/>
    <u date="2009-04-14" value="66"/>
    <u date="2009-04-16" value="234"/>

    <t date="2009-04-01" value="43"/>
    <t date="2009-04-02" value="67"/>
    <t date="2009-04-03" value="432"/>
    <t date="2009-04-08" value="123"/>
    <t date="2009-04-09" value="65"/>

    <l date="2009-04-01" value="12"/>
    <l date="2009-04-02" value="76"/>
    <l date="2009-04-03" value="123"/>
    <l date="2009-04-04" value="6543"/>
    <l date="2009-04-05" value="123"/>
    <l date="2009-04-06" value="65"/>
    <l date="2009-04-15" value="234"/>
    <l date="2009-04-16" value="65"/>
</a>

이 XML 객체에는 3 개의 xmllist가 있습니다. 당신이 알면, 날짜는 그들에게 차이가 있습니다. 누락 날짜를 각 xmllist에 추가하는 방법이 있습니까? 값이 0입니다.

또한 각 xmllist의 첫 번째 및 마지막 노드 전후에 날짜를 추가하고 싶지 않습니다. 각 노드 사이의 누락 된 날짜를 채우고 싶습니다.

어떻게 할 수 있습니까?

감사!!!

도움이 되었습니까?

해결책

불행히도 그렇게 쉽지 않습니다. ActionScript에는 Timedelta 클래스 (Python)가 없습니다. 이것은 날짜 사이의 거리를 약간 고통스럽게 만듭니다. 날짜가 항상 같은 달 (예 : 주어진 달 안에 1-31)이라는 것을 보장 할 수 있다면 나쁘지 않습니다. 그런 다음 다음과 같은 것을 사용할 수 있습니다.

package
{
import flash.display.Sprite;

public class TestXML extends Sprite
{
public function TestXML()
{
    var xml:XML = 
    <a>
        <u date="2009-04-10" value="543"/>
        <u date="2009-04-11" value="234"/>
        <u date="2009-04-13" value="321"/>
        <u date="2009-04-14" value="66"/>
        <u date="2009-04-16" value="234"/>

        <t date="2009-04-01" value="43"/>
        <t date="2009-04-02" value="67"/>
        <t date="2009-04-03" value="432"/>
        <t date="2009-04-08" value="123"/>
        <t date="2009-04-09" value="65"/>

        <l date="2009-04-01" value="12"/>
        <l date="2009-04-02" value="76"/>
        <l date="2009-04-03" value="123"/>
        <l date="2009-04-04" value="6543"/>
        <l date="2009-04-05" value="123"/>
        <l date="2009-04-06" value="65"/>
        <l date="2009-04-15" value="234"/>
        <l date="2009-04-16" value="65"/>
    </a>; // / // <-- need this for stack overflow parse bug :(

    fillBlanks(xml, xml..u);
    fillBlanks(xml, xml..t);
    fillBlanks(xml, xml..l);
}

private function fillBlanks(rootNode:XML, list:XMLList):void
{   
    var dateString:String;
    var matches:Array;
    var currentDate:Date;
    var lastDate:Date;
    for each(var node:XML in list)
    {
        dateString = node.@date.toString();
        matches = dateString.match(/(\d+)\-(\d+)\-(\d+)/);
        currentDate = new Date(matches[1], matches[2], matches[3]);

        while(lastDate && (currentDate.date - lastDate.date) != 1)
        {
            rootNode.insertChildBefore(node, new XML(
                "<" + node.name() + " date=\"" + 
                lastDate.fullYear + 
                "-" + 
                lastDate.month + 
                "-" + 
                (lastDate.date + 1) + 
                "\" value=\"0\" />"));

            lastDate = new Date(lastDate.fullYear, lastDate.month, lastDate.date + 1);
        }

        lastDate = currentDate;
    }
}
}
}

이것은 몇 달 전에 Pad "0"또는 10보다 작은 날짜와 같은 멋진 일을하지 않습니다. 첫 번째는 수정하기가 정말 쉽기 때문에 당신에게 맡깁니다. 두 번째는 그리 쉬운 일이 아닙니다 (특히 날짜가 연도를 교차하는 경우에도).

다른 팁

xml.ignorewhitespace = true가있는 경우 XML은 해당 격차를 무시하고 A.Children ()는 모든 실제 어린이 노드 목록을 제공합니다 ... False 인 경우 다음을 수행 할 수 있습니다.

var myList:XMLList = xml.u + xml.t + xml.l;

널 날짜로 간격을 채우려면 무시하는 Whitespace가 거짓인지 확인하십시오. 이와 같은 것이 작동해야합니다.

var myList:XMLList = xml.u + <x date="0" value="0"/> + xml.t + <x date="0" value="0"/> + xml.l;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top