我有一种感觉,这个问题很简单,但是我做了任何xslt已经有几年了,所以也许有人可以帮忙?如何处理XML命名空间
我有一块xml已经由.net类DataContractSerializer生成,我需要使用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提取上述容易的事情,如交易编号:
<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>
,但我挣扎阅读之类的帐户名,因为有似乎是多个命名空间。
任何人都可以告诉我的xpath访问(a)帐户名称,和(b)代理名称?我认为看到如何访问这些可能会让我访问我需要的一切。
非常感谢, 皮特
非常感谢Empo,必须记住未来的'local-name' – PeteH 2011-05-31 14:56:10
是的,现在我开始明白了。看起来像一般规则是用每个元素的名称空间作为前缀。 – PeteH 2011-05-31 15:06:43
欢迎。我已经为答案添加了详细信息,因为第一个解决方案不是使用名称空间的正确方法。 – 2011-05-31 15:06:50