Xpath查询帮助。从多个路径中选择数据作为单个数据集

时间:2013-08-15 16:34:00

标签: xpath

我有一个xml结构,如下所示:

<doc>
 <line void="false">
  <lineNumber>1</lineNumber>
  <info1>ddddd</info1>
  <info2>aaaaa</info2>
 </line>

 <line void="true">
  <lineNumber>2</lineNumber>
  <voidLineNumber>1</voidLineNumber>
  <voidValue>2.00</voidValue>
 </line>

</doc>

我需要一组数据。我想选择void = false的所有行以及void = true的voidLineNumber和voidValue数据以及原始行的voidLineNumber = lineNumber。

这可能吗?任何帮助,将不胜感激。感谢

1 个答案:

答案 0 :(得分:0)

正如Michael Kay所说,XPath本身只能用于选择节点,而不能用于转换它们。你可以用XSLT做你想做的事:

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="utf-8" indent="yes" />

    <xsl:template match="doc">
        <xsl:apply-templates select="line" />
    </xsl:template>

    <xsl:template match="line">
    <xsl:variable name="voidvalue"><xsl:value-of select="@void" /></xsl:variable>

         <xsl:if test="$voidvalue='false'">
                 <xsl:copy>
                    <xsl:copy-of select="@*" />
                    <xsl:apply-templates />
                </xsl:copy>
         </xsl:if>
    </xsl:template>

    <xsl:template match="*">
                    <xsl:element name="{name()}">
                             <xsl:if test="name(.)='lineNumber'">
                                <xsl:value-of select="."/>
                             </xsl:if>
                    </xsl:element>
    </xsl:template>
</xsl:stylesheet>