سؤال XSLT بسيط: إعداد قيم سمة NODE NODE الداخلية HTML مثل

StackOverflow https://stackoverflow.com/questions/1527042

  •  20-09-2019
  •  | 
  •  

سؤال

أواجه صعوبة في العثور على إجابة على السؤال التالي، والتي تبدو شائعة جدا، لذلك يجب أن أكون في عداد المفقودين شيئا أساسيا. هل يمكن أن تساعدني؟

بالنظر إلى مخطط XML مفتون، عينة إدخال XML، وعينة XSLT أدناه تستخدم لتحويل XML إلى HTML. كيف يمكنني تعيين سمات داخل العلامات؟ علي سبيل المثال <div id=HouseNumber>,<input type="checkbox" id=Zipcode>, ، إلخ؟

ملحوظة: عدم وجود اقتباسات حول houseNumber ورصيف الرمز البريدي في البورصة. أحاول وضع قيمة هذه الصفات من إدخال XML في معرف = "" ""، من أجل = ""، الاسم = ""، إلخ.

شكرا لك على وقتك، ومدخلات على الإصدار الأول من السؤال.

بنية

نموذج مخطط XML

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema elementFormDefault="qualified"  xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Location">
        <xs:complexType>
            <xs:attribute name="State" type="xs:string" use="required" />
            <xs:attribute name="County" type="xs:string" use="required" />
            <xs:attribute name="City" type="xs:string" use="required" />
            <xs:attribute name="Zipcode" type="xs:nonNegativeInteger" use="required" />
            <xs:attribute name="HouseNumber" type="xs:nonNegativeInteger" use="required" />
        </xs:complexType>
    </xs:element>
</xs:schema>

نموذج الإدخال XML:

<Location>
    <State>California</State>
    <County>Los Angeles County</County>
    <City>Los Angeles</City>
    <Zipcode>90210</Zipcode>
    <HouseNumber>123</HouseNumber>
</Location>

عينة xslt:

   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
    <xsl:for-each select="Location">
        <!--Inner HTML example, div has no id-->
        <div class="houseStyle">
            <ul>
                <li><xsl:value-of select="Location/State"/></li>
                <li><xsl:value-of select="Location/County"/></li>
                <li><xsl:value-of select="Location/City"/></li>
                <li><xsl:value-of select="Location/Zipcode"/></li>
            </ul>
        </div>
        <!--Inner HTML example again, but how do I
            set the div id to HouseNumber?-->
        <div class="houseStyle" id=HouseNumber>
            <ul>
                <li><xsl:value-of select="Location/State"/></li>
                <li><xsl:value-of select="Location/County"/></li>
                <li><xsl:value-of select="Location/City"/></li>
                <li><xsl:value-of select="Location/Zipcode"/></li>
            </ul>
        </div>
    </xsl:for-each>
</xsl:stylesheet>

إخراج HTML المرغوب فيه، حيث يحتوي علامة DIV على معرف رقم المنزل:

<div class="houseStyle" id="123">
    <ul>
        <li>California</li>
        <li>Los Angeles County</li>
        <li>Los Angeles</li>
        <li>90210</li>
    </ul>
</div>
هل كانت مفيدة؟

المحلول

ليس من الواضح ما تريد هنا. هل تقصد أنك تريد تعيين سمة الخاص بك إلى نتيجة بعض التعبير XPath (مثل Delta) إذا كان الأمر كذلك، فيجب أن يفعل ذلك الخدعة:

<div class="stylishClass" id="{Delta}">

بدلا من ذلك قد تستخدم <xsl:element> و <xsl:attribute>, ، كما تصف الإجابات الأخرى، على الرغم من أن حالة الاستخدام النموذجية لهذا هو عندما يجب إنشاء اسم العنصر / السمة نفسه.

نصائح أخرى

محاولة:

<xsl:element name="div">
        <xsl:attribute name="class">stylishClass</xsl:attribute>
        <xsl:attribute name="id"><xsl:value-of select="Delta"/></xsl:attribute>  
 </xsl:element>

مثال لعلامة مرساة:

<xsl:element name="a">
      <xsl:attribute name="href">http://example.com</xsl:attribute>            
      <xsl:text>My Link Text</xsl:text>
</xsl:element>

ماذا عن الكود أدناه؟


    <xsl:element name="div">
        <xsl:attribute name="class">stylishClass</xsl:attribute>
        <xsl:attribute name="id"><xsl:value-of select="Delta"/></xsl:attribute>
    </xsl:element>

هذر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top