2013-12-23 68 views
0

我是新來的XSL,但沒關係,但這是我第一次需要使用命名空間來做些事情,而我完全不在,有人可以解釋如何做到這一點: 我有像這樣的XHTML:XSL變換,選擇命名空間

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<?xml-stylesheet type="text/xsl" href="5C.xslt"?> 
<!DOCTYPE rdf:RDF SYSTEM "http://purl.org/dc/schemas/dcmes-xml20000714. 
dtd"> 

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:dcterms="http://purl.org/dc/terms/"> 


<rdf:Description rdf:about="MyJPeg.jpg"> 
<dc:title>Find Info</dc:title> 
<dc:contributor>Myself</dc:contributor> 
<dcterms:created>2013-12-11</dcterms:created> 
<dcterms:issued>2013-12-23</dcterms:issued> 
</rdf:Description> 
</rdf:RDF> 

我需要的,如果發行日期,以驗證是否=至2013年10月10日(回答否)

我的XSLT是:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xhtml="http://www.w3.org/1999/xhtml"> 
<xsl:output method="html" version="1.0" encoding="ISO-8859-1" indent="yes"/> 

<xsl:template match="*"> 
<html><body><pre> 
<xsl:value-of select="rdf/issued"/> 
<xsl:if test="xxx = '2013-10-10' "> 
</xsl:if> 

</pre></body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

所以我嘗試有這個價值行:

<xsl:value-of select="rdf/issued"/> 

(查看是否我得到了它) 而與此一個驗證:

<xsl:if test="xxx = '2013-10-10' "> 

但我用新的名稱空間,我無法找出如何獲得我的價值, 有人可以幫助我嗎?

感謝

問題2,解決方案的工作,但: 如果我想驗證如果日期大於等於代替高等教育,我可怎麼辦呢? (我用>取代=),我改變我的日期是較高和較低,每一次它不工作

<xsl:if test="rdf:Description/dcterms:issued &gt; '2001-01-01' "> 
Good job 
</xsl:if> 

有什麼不對?

感謝

+0

問題#2,解決方案有效,但: 如果我想驗證日期是高於而不是平等,我該怎麼做?(我替換= >),並且我將日期更改爲更高和更低,並且每次都不起作用 做得好 怎麼了? – baronming

+0

如果您正在處理的數據是RDF,那麼使用RDF庫而不是使用XML工具來處理它會更安全 - 在XML中有很多語法上不同但語義上相同的方法來表示相同的RDF圖,您可能會發現如果通過使用與預期不同的表示形式的工具對RDF進行往返,則轉換將停止工作。 –

+0

謝謝伊恩。但最後我發現了一些說我無法驗證日期的事情。所以我試試這個: 我現在可以驗證我的日期 – baronming

回答

3

在XML中,用一個命名空間,如果不同的與沒有命名空間的元素的元素。例如,儘管具有相同的「本地」名稱「RDF」,但以下兩個元素是不同的。

<RDF>Test</RDF> 
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">Test</RDF> 

要在XSLT命名空間內訪問元素,你首先必須在XSTL申報相關的命名空間

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xhtml="http://www.w3.org/1999/xhtml" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:dcterms="http://purl.org/dc/terms/"> 

然後,那就是你有一個指向元素的XPath表達式,你需要(在你的問題中,我認爲它是一個錯字,但「發佈」是你的XML示例中的「說明」的孩子!)。

試試這個XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xhtml="http://www.w3.org/1999/xhtml" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
xmlns:dcterms="http://purl.org/dc/terms/"> 
<xsl:output method="html" version="1.0" encoding="ISO-8859-1" indent="yes"/> 

<xsl:template match="rdf:RDF"> 
<html><body><pre> 
<xsl:value-of select="rdf:Description/dcterms:issued"/> 
<xsl:if test="rdf:Description/dcterms:issued = '2013-10-10' "> 
</xsl:if> 

</pre></body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

值得一提的是,命名空間前綴(「RDF:」在這種情況下),不必是XML一樣,它是在XSLT。它是必須匹配的名稱空間URI(「http://www.w3.org/1999/02/22-rdf-syntax-ns#」)。

+0

謝謝@Tim,我嘗試了你的代碼並且它可以工作。我現在需要幾分鐘時間來理解這段代碼。非常感謝 !! – baronming