XML的行数较少,具体取决于条件

时间:2012-06-26 01:08:34

标签: xml

目前我有以下XML:

<Rowsets>
    <Rowset>
        <Row>
            <DrilldownDepth>0</DrilldownDepth>
            <ScheduleWeek>---</ScheduleWeek>
            <ABC>---</ABC>
            <PQR>1500</PQR>
            <XYZ>15000</XYZ>
            <Quant>285</Quant>
        </Row>
        <Row>
            <DrilldownDepth>1</DrilldownDepth>
            <ScheduleWeek>12</ScheduleWeek>
            <ABC>---</ABC>
            <PQR>1500</PQR>
            <XYZ>15000</XYZ>
            <Quant>285</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>12</ScheduleWeek>
            <ABC>SUPER</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>12</ScheduleWeek>
            <ABC>Duper</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>12</ScheduleWeek>
            <ABC>Fun</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>7</ScheduleWeek>
            <ABC>SUPER</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>7</ScheduleWeek>
            <ABC>Duper</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
        <Row>
            <DrilldownDepth>2</DrilldownDepth>
            <ScheduleWeek>8</ScheduleWeek>
            <ABC>SUPER</ABC>
            <PQR>100</PQR>
            <XYZ>200</XYZ>
            <Quant>300</Quant>
        </Row>
    </Rowset>
</Rowsets>

现在我只需<Row> <DrilldownDepth>2</DrilldownDepth><ScheduleWeek>12</ScheduleWeek> {{1}}。我可以使用转发器/循环实现它,但我需要使用Xpath或XSLT来实现它。所以对此事的任何帮助都将不胜感激。

SOTS

2 个答案:

答案 0 :(得分:0)

以下XPath语句使用predicate过滤器来选择包含符合指定条件的子元素的Row元素:

/Rowsets/Rowset/Row[DrilldownDepth=2 and ScheduleWeek=12]

为XSLT中应用的值使用变量:

<xsl:variable name="depth">2</xsl:variable>
<xsl:variable name="week">12</xsl:variable>
<xsl:apply-templates select="/Rowsets/Rowset/Row[DrilldownDepth=$depth and ScheduleWeek=$week]"/>

答案 1 :(得分:0)

'和'运算符的替代方法是使用第二个谓词。哪个更好取决于个人风格,但如果你在SO上查看很多答案,你会发现多谓词方法是最受欢迎的选择。

看起来像这样......

 /Rowsets/Rowset/Row[DrilldownDepth='2'][ScheduleWeek='12']

注意:在文字数字周围有或没有引号的情况下同样有效。没有可能稍微更具可读性。可能稍微有点效率。这又是一种风格选择。