我有一種感覺,這個問題很簡單,但是我做了任何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