将节点提取到元素满足匹配的变量中

时间:2014-09-22 22:31:58

标签: xml xslt

使用Xslt相当新,我试图在2个元素满足匹配时提取节点。以下是XML

的示例
<resultset>
  <row>
    <Abs>1</Abs>
    <Real>1</Real>
    <Let>A</Let>
    <pdate>2014-09-22</pdate>
    <Id>11913</Id>
  </row>
<row>
    <Abs>2</Abs>
    <Real>2</Real>
    <Let>A</Let>
    <pdate>2014-09-22</pdate>
    <Id>11914</Id>
  </row>
<row>
    <Abs>3</Abs>
    <Real>3</Real>
    <Let>A</Let>
    <pdate>2014-09-22</pdate>
    <Id>11915</Id>
  </row>
</resultset>

这是我的xslt

   <xsl:param name="p_data_file">/tmp/pdata.xml</xsl:param>
    <xsl:for-each select="file">
    <xsl:sort select="sec"/>
    <xsl:sort select="page" data-type="number"/>
    <xsl:variable name="sec" select="sec/text()"/>
    <xsl:variable name="page" select="page/text()"/>
    <xsl:variable name="p_data" select="document($p_data_file)/resultset/row[field[@name='Let
']=$sec and field[@name='Real']=$page]"/>

我可以看到秒和页面被设置为A 1,A 2,A 3但是,p_data永远不会被设置。我完全关闭或只是遗漏了什么?

任何帮助或指出我正确的方向将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

虽然有点猜测:如果只是关于p_data变量,可能需要调整选择值:

<xsl:variable name="p_data" 
 select="document($p_data_file)/resultset/
 row[field[@name='Let']=$sec and field[@name='Real']=$page]"/>

应该是

<xsl:variable name="p_data"
 select="document($p_data_file)/resultset/
  row[child::Let/text()=$sec and child::Real/text()=$page]"/>

刚从//行开始测试,并选择了一个特定的:

//row[child::Let/text()='A' and child::Real/text()='2']

结果:

<row>
 <Abs>2</Abs>
 <Real>2</Real>
 <Let>A</Let>
 <pdate>2014-09-22</pdate>
 <Id>11914</Id>
</row>