2013-12-23 4 views
0

Я новичок в XSL, но все в порядке, но это первый раз, когда мне нужно что-то делать с пространством имен, и я полностью выхожу, может кто-нибудь объяснить, как это сделать: У меня есть XHTML, как это:XSL Transform, выберите пространство имен

<?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' "> 

Но я новое с пространством имен, и я не могу выяснить, как получить my value, Может кто-нибудь мне помочь?

благодаря

Вопрос # 2, решение работает, но: Если я хочу, чтобы проверить, если дата больше, чем вместо равных, как я могу сделать это? (Я заменяю = от >), и я изменить дату, чтобы быть выше и ниже, и каждый раз, когда он не работает

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

Что случилось?

благодаря

+0

Вопрос №2, решение работает, но: Если я хочу проверить, является ли дата ВЫШЕ чем, а не равна, как я могу это сделать?(Я заменяю = на >), и я меняю дату, чтобы быть выше и ниже, и каждый раз, когда она не работает Хорошая работа Что случилось? – baronming

+0

Если данные, которые вы обрабатываете, являются RDF, было бы гораздо безопаснее обрабатывать его с использованием библиотеки RDF, а не инструментов XML. Существует много синтаксически различных, но семантически эквивалентных способов представления одного и того же графика RDF в XML, и вы можете найти ваше преобразование перестает работать, если вы обойдете 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, которое относится к элементам, необходимо добавить в префиксе

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

(я принял это как опечатка в вашем вопросе, но «выдан» является дочерним «Описание» в вашей выборке 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> 

Стоит отметить, что префикс пространства имен («РДФ:» в данном случае), не должны быть одинаковыми в XML, как это в XSLT. Это URI пространства имен («http://www.w3.org/1999/02/22-rdf-syntax-ns#»), который должен соответствовать.

+0

Спасибо @Tim, я пробую ваш код, и он работает. Теперь я прочитаю несколько минут, чтобы понять этот код. БОЛЬШОЕ СПАСИБО !! – baronming

Смежные вопросы