مضمنة إخراج الوثيقة اختيار استخدام نتيجة الوثيقة في XSLT 2.0

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

  •  10-07-2019
  •  | 
  •  

سؤال

تحياتي

أنا أبحث عن طريقة القيام به في خط النتيجة (إخراج) الوثيقة اختيار في XSLT.أنا أعرف من طريقة حيث يخلق xsl:result-document عقدة أن يكون واحدا التحول ينطبق على وثائق متعددة.وعادة ما يستخدم هذا الأسلوب العديد من يمر مثل:

<xsl:template match="/">
    <xsl:apply-templates select="*"/>
    <xsl:result-document href="test.xml">
        <xsl:apply-templates select="*"/>
    </xsl:result-document>
</xsl:template>

أنا أبحث عن طريقة للقيام بذلك مضمنة حتى أتمكن من بناء اثنين من المستندات الإخراج في تمريرة واحدة.والسبب هو أنني قد مؤقت الشجرة التي بنيت مثل التحول هو المدى الذي أريد أن الإخراج إلى ملف.

<xsl:variable name="treeBase">
    <Base/>
</xsl:variable>

<xsl:template match="/">
    <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="these_elements">
    <xsl:param name="temp" select="$treeBase"/>


</xsl:template>

<xsl:template match="not_these_elements">
    <xsl:param name="temp" select="$treeBase"/>

    <xsl:apply-templates select="@*|node()">
       <xsl:with-param name="temp">
           <Base>
              <xsl:copy-of select="$temp/Base/*"/>
              <Item>
                  <xsl:value-of select="ThisItem"/>
              </Item>
           </Base>
        </xsl:with-param>
</xsl:template>

لماذا تريد أن تفعل هذا ؟ في XSLT أنا بناء مؤقت شجرة من خلال معلمة المكالمات.أريد أن الإخراج المؤقت شجرة كما يتم بناؤه إلى وثيقة منفصلة ولكن لا يزال استخدام مؤقت شجرة بني تدفق التحكم.مع الطريقة الحالية يجب أن تعمل من خلال مجمع التحول مرتين.

هل هناك طريقة للقيام بذلك في XSLT أو هو واحد يمر واحدة الوثيقة فقط ؟

شكرا مقدما.

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

المحلول

هنا مثالا على كيفية القيام بذلك:

هذا التحول:

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <!--                                               -->    
    <xsl:template match="/*">
      <xsl:variable name="vTop" select="."/>
  <!--                                               -->    
        <xsl:for-each-group select="num" group-by="xs:integer(.) mod 2">
          <xsl:result-document href="file:///C:/Temp/file{position()}.xml">
            <xsl:element name="{name($vTop)}">
              <xsl:copy-of select="current-group()"/>
            </xsl:element>
          </xsl:result-document>
        </xsl:for-each-group>
    </xsl:template>
</xsl:stylesheet>

عند تطبيقها على مستند XML

<nums>
  <num>01</num>
  <num>02</num>
  <num>03</num>
  <num>04</num>
  <num>05</num>
  <num>06</num>
  <num>07</num>
  <num>08</num>
  <num>09</num>
  <num>010</num>
</nums>

تنتج أراد ملفين: file1.xml و file2.xml, التي تحتوي في المقابل ، فإن "num" عناصر غريبة و حتى مع القيم.

ملاحظة أنه لا توجد "multiplr يمر" التعليمات البرمجية "inline", كما هو مطلوب.

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