使用Xpath解析xml中的关系

时间:2015-07-22 17:36:43

标签: xml xpath

我想知道是否有可能在xml文档中解决与其相关的值之间的关系。

假设我们有以下XML文档

  <document version="1.4" date="20150427" time="170326">
    <timeperiods>
        <timeperiod id="TP_1">
            <day>1</day>
            <period>1</period>
            <starttime>0815</starttime>
            <endtime>0900</endtime>
        </timeperiod>
        <timeperiod id="TP_2">
            <day>1</day>
            <period>2</period>
            <starttime>0915</starttime>
            <endtime>1000</endtime>
        </timeperiod>
        <timeperiod id="TP_3">
            <day>1</day>
            <period>3</period>
            <starttime>1015</starttime>
            <endtime>1100</endtime>
        </timeperiod>
        <timeperiod id="TP_4">
            <day>1</day>
            <period>4</period>
            <starttime>1115</starttime>
            <endtime>1200</endtime>
        </timeperiod>
        <timeperiod id="TP_5">
            <day>1</day>
            <period>5</period>
            <starttime>1215</starttime>
            <endtime>1300</endtime>
        </timeperiod>
        <timeperiod id="TP_6">
            <day>1</day>
            <period>6</period>
            <starttime>1315</starttime>
            <endtime>1400</endtime>
        </timeperiod>
        <timeperiod id="TP_7">
            <day>1</day>
            <period>7</period>
            <starttime>1415</starttime>
            <endtime>1500</endtime>
        </timeperiod>
        <timeperiod id="TP_8">
            <day>1</day>
            <period>8</period>
            <starttime>1515</starttime>
            <endtime>1600</endtime>
        </timeperiod>
        <timeperiod id="TP_9">
            <day>1</day>
            <period>9</period>
            <starttime>1615</starttime>
            <endtime>1700</endtime>
        </timeperiod>
        <timeperiod id="TP_10">
            <day>1</day>
            <period>10</period>
            <starttime>1715</starttime>
            <endtime>1800</endtime>
        </timeperiod>
        <timeperiod id="TP_11">
            <day>1</day>
            <period>11</period>
            <starttime>1815</starttime>
            <endtime>1900</endtime>
        </timeperiod>
    </timeperiods>
    <lessons>
        <lesson id="LS_100">
            <periods>28</periods>
            <times>
                <time>
                    <assigned_period>1</assigned_period>
                </time>
                <time>
                    <assigned_period>2</assigned_period>
                </time>
                <time>
                    <assigned_period>1</assigned_period>
                </time>
                <time>
                    <assigned_period>3</assigned_period>
                </time>
                <time>
                    <assigned_period>5</assigned_period>
                </time>
                <time>
                    <assigned_period>10</assigned_period>
                </time>
            </times>
        </lesson>
    </lessons>
</document>

是否可以选择任何时间元素并显示相应assigned_period的启动时间?

我试过这样的事情:

document/lessons/lesson/times/time/../../../../timeperiods/timeperiod[period/text() = ./assigned_period/text()]/starttime

仍然没有运气......我不知道我做错了什么。如果我正在评估以下表达式,我会得到以下结果集:

record.XPathEvaluate("//timeperiod")

- &GT;我得到了所有的时间段

record.XPathEvaluate("./assigned_period")
<assigned_period>6</assigned_period>

我得到了当前时间元素的正确assigned_period。

但是,如果我正在尝试执行以下

record.XPathEvaluate("//timeperiod[period = ./assigned_period]")

我收到null。 我也尝试了以下内容:

record.XPathEvaluate("//timeperiod[period/text() = ./assigned_period/text()]")

没有运气。

1 个答案:

答案 0 :(得分:0)

我不确定你是否想要这个,但是这样的xpath选择在periodic_period中存在句点的timeperiod标签的开始时间

//timeperiod[period = //assigned_period]/starttime

结果:

Element='<starttime>0815</starttime>'
Element='<starttime>0915</starttime>'
Element='<starttime>1015</starttime>'
Element='<starttime>1215</starttime>'
Element='<starttime>1715</starttime>'