0
<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 或任何值。

我如何在 XSLT 中知道与 @name=PropertyURI 的绑定是否可用?
如果是,那么下一个绑定 @name 属性的名称是什么?

4

2 回答 2

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> 
于 2010-04-02T08:17:36.047 回答
0

由于您对问题的描述和您想要的输出似乎并不相关,因此您在寻找什么还不是很清楚。我认为您要做的是找到每个binding有子元素的元素uri,找到有子元素的相关binding元素literal,然后使用uriandliteral值来填充a元素。

该模板假定这两个binding元素是相关的,因为带有子元素的name属性以带有子uri元素的属性开头,例如“PropertyURI”以“Property”开头,“ValueURI”以“Value”开头:nameliteral

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

如果相关元素只是具有子元素的元素之后的下一个 元素,请使用上述模板,将变量赋值替换为:bindinguri

<xsl:variable name="literal" select="following-sibling::binding[1]/literal"/>
于 2010-04-02T07:56:57.610 回答