كيفية إضافة @xml: قاعدة إلى ملفات .xml الخاصة بي؟

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

  •  29-09-2019
  •  | 
  •  

سؤال

أحتاج إلى ورقة أنماط لتحويل ملفات Docbook XML الخاصة بي بحيث تتضمن الآن XML: العنصر الأساسي إلى علامات القسم الخاصة بي. كيف يمكنني القيام بذلك (منذ XML: يحتاج الأساس إلى نظام ومعلومات العقدة ؟؟؟)

إدخال:

<section xmlns="http://docbook.org/ns/docbook" xml:id="voidVisit" version="5">
<title>Void</title>

 <section>
  <title>Screenshot</title>
      <mediaobject>
          <imageobject>
              <imagedata fileref="screenshots/Dialog.png" />
          </imageobject>
      </mediaobject>
 </section>
</section>

انتاج:

      ...
      <section xml:id="void" version="5"
           xml:base="file:/C:/Projects/my/proj/trunk/spec/module/components/void.xml">
     <title>Void</title>
     <section>
        <title>Screenshot</title>
        <mediaobject>
           <imageobject>
              <imagedata fileref="screenshots/Dialog.png"/>
           </imageobject>
        </mediaobject>
     </section>
     ...
هل كانت مفيدة؟

المحلول

في XSLT 2.0 (XPath 2.0) الوظائف static-base-uri() و base-uri() يمكن استخدامه لهذا الغرض.

هنا مثال عمل:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>
    <xsl:template match="/">
     <doc xml:base="{base-uri()}"/>
    </xsl:template>
</xsl:stylesheet>

عند تطبيق هذا التحول ، يتم إنتاج النتيجة المطلوبة:

<doc xml:base="file:/C:/CVS-DDN/fxsl-xslt2/data/marrowtr.xml"/>

لذلك ، التحول الكامل في قضيتك:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:d="http://docbook.org/ns/docbook">
 <xsl:output omit-xml-declaration="yes"/>

    <xsl:template match="node()|@*">
      <xsl:copy>
         <xsl:apply-templates select="node()|@*"/>
      </xsl:copy>
    </xsl:template>

    <xsl:template match="/d:section">
     <xsl:copy>
       <xsl:attribute name="xml:base" select="base-uri(/)"/>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

في XSLT 1.0 الحل هو لتمرير القاعدة uri كمعلمة خارجية (عالمية xsl:param>) إلى التحول.

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