gpt4 book ai didi

xslt - XSL 转换,选择命名空间

转载 作者:行者123 更新时间:2023-12-04 16:59:23 25 4
gpt4 key购买 nike

我是 XSL 的新手,但没关系,但这是我第一次需要对命名空间做一些事情,而且我完全不知道,有人可以解释一下如何做到这一点:
我有一个这样的 XHTML:

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

所以我试着用这条线获得值(value):
<xsl:value-of select="rdf/issued"/>

(看看我有没有收到)
并用这个验证:
<xsl:if test="xxx = '2013-10-10' ">

但我是名字空间的新手,我不知道如何获得我的值(value),
有人能帮我吗 ?

谢谢

问题#2,解决方案有效,但是:
如果我想验证日期是否高于而不是相等,我该怎么做? (我将 = 替换为 >),然后我将日期更改为更高和更低,并且每次都不起作用
<xsl:if test="rdf:Description/dcterms:issued &gt; '2001-01-01' ">
Good job
</xsl:if>

怎么了 ?

谢谢

最佳答案

在 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>

值得一提的是, namespace 前缀(在本例中为“rdf:”)在 XML 中不必与在 XSLT 中相同。必须匹配的是命名空间 URI(“ http://www.w3.org/1999/02/22-rdf-syntax-ns#”)。

关于xslt - XSL 转换,选择命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20744486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com