命名空间没有给出预期的结果

时间:2013-04-29 13:55:28

标签: xslt

我正在尝试使用XSLT阅读以下XML,但无法获得预期的结果。

如果我从txnDetail节点中删除“xmlns:a =”http://schemas.datacontract.org/2004/07/CoreModels“命名空间,那么下面的xslt工作正常???

我做错了什么?

输入XML:

<TransactionRsp xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
   <avlBal>848.35</avlBal>
   <blkAmt>0</blkAmt>
   <txnDetail xmlns:a="http://schemas.datacontract.org/2004/07/CoreModels">
      <a:txnDetail>
         <a:billAmount>400</a:billAmount>
         <a:txnDateTime>2012-02-23T14:35:45</a:txnDateTime>
      </a:txnDetail>
      <a:txnDetail>
         <a:billAmount>10</a:billAmount>
         <a:txnDateTime>2012-07-30T12:22:14</a:txnDateTime>
      </a:txnDetail>
   </txnDetail>
</TransactionRsp>

XSLT样式表:

<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
 <root>
     <xsl:for-each select="TransactionRsp/txnDetail/txnDetail">
      <row>
        <col name="billAmount"><xsl:value-of select="billAmount"/></col>
        <col name="itemID"><xsl:value-of select="itemID"/></col>
      </row>
      </xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:2)

您需要使用名称空间前缀限定XPath表达式:

  <xsl:for-each select="TransactionRsp/txnDetail/a:txnDetail">
  <row>
    <col name="billAmount"><xsl:value-of select="a:billAmount"/></col>
    <col name="itemID"><xsl:value-of select="a:itemID"/></col>
  </row>
  </xsl:for-each>


编辑:必须为您的XSLT文件声明命名空间。感谢@hcayless下面的评论。

<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:a="http://schemas.datacontract.org/2004/07/CoreModels" >