我已經創建了一個客戶端來與各種服務器上的Web服務進行通信,並試圖使用XSL格式化XML。這些服務都是從相同的規範創建的,所以它們發出的XML具有相同的格式和xmlns命名空間名稱。我的XSL需要測試特定類型的元素以瞭解如何格式化它們。問題在於服務器之間,他們使用不同的xmlns前綴。我一直在使用的測試是純字符串比較,並沒有將前綴擴展到完整的xmlns,所以比較失敗。我的問題是,有沒有辦法擴大前綴,使字符串比較工程?如何在測試XML元素時讓XSL忽略xmlns前綴
這是一個簡化的例子來說明問題。在 「XSL:如果測試」 行,我需要擴大 「R0」 和 「XX」 變成 「http://www.foo.com/2.1/schema」,使他們測試相同的:
XSL:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:r0="http://www.foo.com/2.1/schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<html>
<head>
</head>
<body >
<xsl:for-each select="MyResp/r0:creditVendReceipt/r0:transactions/r0:tx">
<xsl:if test="@xsi:type='r0:CreditTx'">
<xsl:value-of select="r0:amt/@value"/>(CR)
</xsl:if>
<xsl:if test="@xsi:type='r0:DebitTx'">
<xsl:value-of select="r0:amt/@value"/>(DB)
</xsl:if>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XML(此作品):
<?xml version="1.0" encoding="unicode"?>
<MyResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:r0="http://www.foo.com/2.1/schema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<r0:creditVendReceipt receiptNo="1234567890">
<r0:transactions>
<r0:tx xsi:type="r0:CreditTx">
<r0:amt value="100" />
</r0:tx>
<r0:tx xsi:type="r0:DebitTx">
<r0:amt value="50" />
</r0:tx>
</r0:transactions>
</r0:creditVendReceipt>
</MyResp>
XML(失敗):
<?xml version="1.0" encoding="unicode"?>
<MyResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xx="http://www.foo.com/2.1/schema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xx:creditVendReceipt receiptNo="1234567890">
<xx:transactions>
<xx:tx xsi:type="xx:CreditTx">
<xx:amt value="100" />
</xx:tx>
<xx:tx xsi:type="xx:DebitTx">
<xx:amt value="50" />
</xx:tx>
</xx:transactions>
</xx:creditVendReceipt>
</MyResp>
謝謝!這正是我所期待的。 – user2176753 2013-03-22 07:01:47