سؤال

أريد تحويل مستند XML.مصدر XML يبدو مثل هذا:

<svc:ElementList>
    <svc:Element>
        <Year>2007</Year>
    </svc:Element>
    <svc:Element>
        <Year>2006</Year>
    </svc:Element>
    <svc:Element>
        <Year>2005</Year>
    </svc:Element>
</svc:ElementList>

أريد أن أنتقل إلى:

<ElementList>
    <NewTag2007/>
    <NewTag2006/>
    <NewTag2005/>
</ElementList>

السطر التالي من التعليمات البرمجية لا يعمل:

<xsl:element name="{concat('NewTag',Element/Year)}"/>

الإخراج هو مجموعة من العناصر التي تبدو مثل هذا: < NewTag >.(دون المسافات...)

"//عنصر/سنة", "./العنصر/العام", ، "//svc:العنصر/العام" لا تعمل.أحد المضاعفات هو أن "العنصر" العلامة في "svc" مساحة في حين أن "السنة" العلامة في مساحة الاسم الافتراضية.

على أي حال, أنا التي تواجه مساحة المسألة أو أنا سوء استخدام "concat()" وظيفة ؟

هل كانت مفيدة؟

المحلول

ربما مساحة المسائل وربما واحدة مع السياق الحالي.المصدر (مع إضافة مساحة الإعلان أن تجعل xml)

<svc:ElementList xmlns:svc="svc">
  <svc:Element>
    <Year>2007</Year>
  </svc:Element>
  <svc:Element>
    <Year>2006</Year>
  </svc:Element>
  <svc:Element>
    <Year>2005</Year>
  </svc:Element>
</svc:ElementList>

الأنماط

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:svc="svc"
                version="1.0">
  <xsl:template match="svc:ElementList">
    <xsl:element name="{local-name()}">
      <xsl:for-each select="svc:Element">
        <xsl:element name="{concat('NewTag', Year)}"/>
      </xsl:for-each>
    </xsl:element>
  </xsl:template> 
</xsl:stylesheet>

سوف تعطيك الناتج تحتاج إليها.علما بأن svc:Element يجب أن تكون مختارة باستخدام مساحة مسبوقة وأن السياق عند إنشاء فئة جديدة هي svc:Element, لا svc:ElementList.

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