كيف تكتب XSLT لتحويل XML التالي في HTML التالي؟
سؤال
<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>
المشكلة هي أن عدد علامات الربط يمكن أن يختلف. في بعض الأحيان قد يكون لدينا فقط قيم URIS أو ony.
كيف يمكنني أن أعرف في XSLT أنه إذا كان الربط مع @name = propertyuri متاحًا؟
إذا كانت الإجابة بنعم ، فما اسم سمة Nextname @name التالية؟
المحلول
هناك بالفعل إجابة تبدو صالحة لكنني أمضيت للتو 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>
نصائح أخرى
ليس من الواضح تمامًا ما تبحث عنه ، لأن وصفك للمشكلة والإخراج المطلوب لا يبدو مرتبطًا. أنا فكر في أن ما تريد القيام به هو العثور على كل binding
عنصر مع uri
طفل ، ابحث عن الصلة binding
العنصر الذي لديه ملف literal
الطفل ، واستخدم uri
و literal
القيم لملء a
عنصر.
هذا القالب يفترض أن الاثنين binding
العناصر مرتبطة لأن ال name
ميزة على واحد مع uri
يبدأ الطفل بـ name
ميزة على واحد مع literal
الطفل ، مثل "propertyuri" يبدأ بـ "خاصية" و "Valueuri" يبدأ بـ "القيمة":
<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>
إذا كان العنصر ذي الصلة هو ببساطة التالي binding
العنصر بعد واحد مع uri
الطفل ، استخدم القالب أعلاه ، استبدال المهمة المتغيرة مع:
<xsl:variable name="literal" select="following-sibling::binding[1]/literal"/>