使用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永远不会被设置。我完全关闭或只是遗漏了什么?
任何帮助或指出我正确的方向将不胜感激。谢谢!
答案 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>