Xml xslt-通过xpath获取元素的前一个同级
我试图获取元素skos:prefLabel的值,该元素有一个兄弟skos:closeMatch。然而,我发现还有其他skos:prefLabel是skos:closeMatch的前辈。我目前正在进行以下工作:Xml xslt-通过xpath获取元素的前一个同级,xml,xpath,xslt-1.0,rdf,skos,Xml,Xpath,Xslt 1.0,Rdf,Skos,我试图获取元素skos:prefLabel的值,该元素有一个兄弟skos:closeMatch。然而,我发现还有其他skos:prefLabel是skos:closeMatch的前辈。我目前正在进行以下工作: <?xml version="1.0" encoding="utf-8" ?> <root> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:skosx
<?xml version="1.0" encoding="utf-8" ?>
<root>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:skosxl="http://www.w3.org/2008/05/skos-xl#"
....(namespaces deleted for brevity)
xmlns:xml="http://www.w3.org/XML/1998/namespace">
<skos:Concept rdf:about="http://aims.fao.org/aos/agrovoc/c_26321">
<skos:prefLabel xml:lang="fa">آبیس ماریزیای</skos:prefLabel>
<skos:prefLabel xml:lang="en">Abies mariesii</skos:prefLabel>
....
</skos:Concept>
<skos:Concept>
....
</skos:Concept>
<skos:narrower rdf:resource="http://aims.fao.org/aos/agrovoc/c_1322232213779"/>
<skos:narrower rdf:resource="http://aims.fao.org/aos/agrovoc/c_19"/>
<skos:prefLabel xml:lang="ar">شوح</skos:prefLabel>
<skos:prefLabel xml:lang="fa">آبیس</skos:prefLabel>
<skos:prefLabel xml:lang="ko">전나무속</skos:prefLabel>
<skos:prefLabel xml:lang="ja">モミ属</skos:prefLabel>
<skos:prefLabel xml:lang="tr">Abies</skos:prefLabel>
....
<skos:prefLabel xml:lang="es">Abies</skos:prefLabel>
<skos:prefLabel xml:lang="en">Abies</skos:prefLabel>
....
<skos:prefLabel xml:lang="hi">पलूदर</skos:prefLabel>
<skos:prefLabel xml:lang="zh">冷杉属</skos:prefLabel>
<skos:closeMatch>
<rdf:Description rdf:about="http://d-nb.info/gnd/4184405-1">
<skos:closeMatch rdf:resource="http://aims.fao.org/aos/agrovoc/c_10"/>
</rdf:Description>
</skos:closeMatch>
....
</rdf:RDF>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
....(namespaces deleted for brevity)
xmlns:ns1="http://art.uniroma2.it/ontologies/vocbench#"
xmlns:void="http://rdfs.org/ns/void#">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="root">
<xsl:for-each select="rdf:RDF">
<xsl:text>START HERE</xsl:text>
<xsl:text> </xsl:text>
<xsl:text>=LDR 00000nam 2200000Ia 4500</xsl:text>
<xsl:text> </xsl:text>
....
<xsl:apply-templates select="skos:Concept" />
<xsl:text> </xsl:text>
....
</xsl:for-each>
</xsl:template>
<xsl:template match="skos:Concept/skos:prefLabel">
<xsl:for-each select="//skos:closeMatch/preceding-sibling::skos:prefLabel" />
<xsl:text>=306 \\$aclosematch$b</xsl:text>
<xsl:value-of select="." />
<xsl:text> </xsl:text>
</xsl:template>
.....
</xsl:stylesheet>
使用上面的xslt,我得到的是所有的skos:prefLabel,这就是为什么我在问题的开头一行提到,除了最接近的skos:closeMatch之外,还有许多skos:prefLabel。我还试着输入select=preference sibling::skos:prefLabel和preference sibling::skos:prefLabel的值以及各种组合,或者我得到的是相同的一组skos:prefLabel或空白。我希望你能帮我回答我的问题。蒂亚,干杯
注意:整个文件可用更改select=“//skos:closeMatch/previous sibling::skos:prefLabel”
到
select=“//skos:closeMatch/previous sibling::skos:prefLabel[1]”
应该做你想做的事我希望..更改select=“//skos:closeMatch/previous sibling::skos:prefLabel”
到
select=“//skos:closeMatch/previous sibling::skos:prefLabel[1]”
我希望你能做你想做的事你的问题不清楚。首先,所有的
skos:prefLabel
节点都是skos:CloseMatch
的兄弟节点。您向我们展示的输出中包含的数据不在输入中。那么模板应该有[1]个位置?شوح、آبیس和전나무속 实际上是在我的示例的输入中。文件实际位于此处:。谢谢我不知道,因为我不明白你的目标是什么。我建议你尽量减少你的例子,只说明问题的必要性。提示:我们大多数人不懂阿拉伯语、波斯语或韩语,因此很难将输入与输出关联起来(无论如何,输入与输出不匹配-输入中没有“car”、“cfa”或“cko”)。请复习:嗨!我编辑了这个问题。实际上,我已经指出,我还没有将模板放入xml:lang属性中,但是由于它增加了混乱,我对其进行了编辑。事实上,在ar之前是$c,意思是阿拉伯语,并且已经在编辑中添加了模板。我投票结束了你的问题,因为“寻求调试帮助的问题(“为什么这个代码不起作用?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中复制它所需的最短代码。”你的问题不清楚。首先,所有的skos:prefLabel
节点都是skos:CloseMatch
的兄弟节点。您向我们展示的输出中包含的数据不在输入中。那么模板应该有[1]个位置?شوح、آبیس和전나무속 实际上是在我的示例的输入中。文件实际位于此处:。谢谢我不知道,因为我不明白你的目标是什么。我建议你尽量减少你的例子,只说明问题的必要性。提示:我们大多数人不懂阿拉伯语、波斯语或韩语,因此很难将输入与输出关联起来(无论如何,输入与输出不匹配-输入中没有“car”、“cfa”或“cko”)。请复习:嗨!我编辑了这个问题。实际上,我已经指出,我还没有将模板放入xml:lang属性中,但是由于它增加了混乱,我对其进行了编辑。事实上,在ar之前是$c,意思是阿拉伯语,并且已经在编辑中添加了模板。我投票结束了你的问题,因为“寻求调试帮助的问题(“为什么这个代码不起作用?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中复制它所需的最短代码。”
=306 //$aشوح
=306 //$aآبیس
=306 //$a전나무속
....
=306 //$aAbies