<result>
<binding name="PropertyURI">
<uri>http://dbpedia.org/ontology/motto</uri>
</binding>
<binding name="Property">
<literal xml:lang="en">motto</literal>
</binding>
<binding name="ValueURI">
<uri>http://dbpedia.org/ontology/motto</uri>
</binding>
<binding name="Value">
<literal>Ittehad, Tanzim, Yaqeen-e-Muhkam(Urdu)</literal>
</binding>
</result>
我想将其转换为
<a href=PropertyURI>Property</a>
<a href=ValueURI>Value</a>
问题是绑定标签的数量可能不同。有时我们可能只有URI或ony值。
如何在XSLT中知道是否可以使用@ name = PropertyURI进行绑定? 如果是,那么下一个绑定@name属性的名称是什么?
答案 0 :(得分:1)
已经有一个似乎有效的答案,但我只花了10分钟测试以下代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="/result/binding[@name='PropertyURI']"/>
</xsl:template>
<xsl:template match="binding">
<a>
<xsl:attribute name="href">
<xsl:value-of select="./uri"/>
</xsl:attribute>
<xsl:value-of select="./following-sibling::binding[1][@name='Property']/literal"/>
</a>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
目前还不太清楚您在寻找什么,因为您对问题的描述和您想要的输出似乎并不相关。我认为您想要做的是找到binding
个孩子的每个uri
元素,找到有binding
的相关literal
元素子,并使用uri
和literal
值填充a
元素。
此模板假定两个binding
元素是相关的,因为name
子元素的uri
属性以name
属性开头,其中literal
属性与<xsl:template match="binding[uri]">
<xsl:variable name="name" value="@name"/>
<xsl:variable name="literal"
select="/result/binding[starts-with($name, @name)]/literal"/>
<xsl:if test="$literal">
<a href="{uri}">
<xsl:value-of select="$literal"/>
</a>
</xsl:if>
</xsl:template>
孩子,例如“PropertyURI”以“Property”开头,“ValueURI”以“Value”开头:
binding
如果相关元素只是具有uri
子元素的下一个 <xsl:variable name="literal" select="following-sibling::binding[1]/literal"/>
元素,请使用上面的模板,将变量赋值替换为:
{{1}}