我有一种感觉,这个问题很简单,但是我已经多年没有做过任何xslt了,所以也许有人能帮上忙?
我有一段由.net类DataContractSerializer生成的xml,我需要使用xslt从这个xml中提取数据,最后得到一些html。对我来说,让事情变得复杂的是大量使用名称空间...
xml的片段如下所示:
<FundDeal xmlns:i="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Deal">
    <Id xmlns="http://schemas.datacontract.org/2004/07/Guide.BusinessObjects.Deal">DEAL12345</Id>
    <Account xmlns:d2p1="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
        <d2p1:AlternateId i:nil="true"/>
        <d2p1:Designation>XXX</d2p1:Designation>
        <d2p1:Name>QWERTY</d2p1:Name>
        <d2p1:Number>12345678</d2p1:Number>
        <d2p1:Status i:nil="true"/>
    </Account>
    <Agent xmlns:d2p1="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
        <d2p1:Id>54321</d2p1:Id>
        <d2p1:Name>ASDFG</d2p1:Name>
        <d2p1:Status>Active</d2p1:Status>
    </Agent>
    ....
</FundDeal>现在,我需要通过样式表转换这个xml,我发现这个过程相当困难。我认识到xsl需要自己对所涉及的名称空间的引用,并且可以使用以下xsl轻松地提取上面的交易Id:
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:ms="urn:schemas-microsoft-com:xslt"
    xmlns:grbd="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Deal"
    xmlns:gbd="http://schemas.datacontract.org/2004/07/Guide.BusinessObjects.Deal"
    xmlns:grba="http://schemas.datacontract.org/2004/07/Guide.Rx.BusinessObjects.Account">
    <xsl:output indent="yes" omit-xml-declaration="yes" method="html"/>
    <xsl:template match="/">
      <html>
        <head>
          <!-- some styles here -->
        </head>
        <body>
          <table cellpadding="5" cellspacing="5" border="0">
            <tr>
              <td class="SectionTitle" colspan="2">
                <xsl:text>Deal Cancellation Notification - </xsl:text>
                <xsl:value-of select="//ggbd:Id"/>
              </td>
            </tr>
          </table>
        </body>
      </html>
    </xsl:template>
</xsl:stylesheet>   但是我很难读懂像帐户名这样的东西,因为似乎有多个名称空间在运行。
谁能告诉我访问(a)帐户名和(b)代理名称的xpath?我想看看如何访问这些可能会让我访问所有我需要的东西。
非常感谢,皮特
发布于 2011-05-31 22:42:28
这是可行的,但这不是正确的方式:
 //*[local-name()='Account']/grba:Name和
 //*[local-name()='Agent']/grba:Name看起来更好的是您的输入,您有父名称空间。您需要选择正确的元素命名空间。例如,Account和Agent在grbd作用域中,而Name在grba中。在名称空间声明之后,您可以按如下方式进行选择:
//grbd:Account/grba:Name或
//grbd:Agent/grba:Name这对于带有前缀命名空间的元素是正确的。否则,您应该选择本地的。例如,对于第一个Id节点,您需要:
//gbd:Id发布于 2011-05-31 22:35:14
你可以看到:http://www.xml.com/pub/a/2001/05/02/trxml.html
https://stackoverflow.com/questions/6188689
复制相似问题