এক্সএসএলটিতে একটি নতুন লাইন তৈরি করা হচ্ছে


197

আমি এক্সএসএলটিতে পাঠ্য আউটপুটটির জন্য একটি নতুন লাইন তৈরি করতে চাই। কোন ধারনা?


11
আমি মনে করি, উত্তরটি গ্রহণ করার সময় এখন :) :)
ফ্লোরজোন

উত্তর:


239

নিম্নলিখিত এক্সএসএল কোডটি একটি নতুন লাইন (লাইন ফিড) অক্ষর তৈরি করবে:

<xsl:text>&#xa;</xsl:text>

একটি জন্য গাড়ি ফেরত , ব্যবহার করুন:

<xsl:text>&#xd;</xsl:text>

7
+1: <xsl:text>আপনি যদি এমন কোনও কিছু ব্যবহার করেন যা আপনার এক্সএসএল ফাইলটির পুনরায় ফর্ম্যাট করতে পারে এবং হোয়াইটস্পেসের সাথে জগাখিচুড়ি করে তবে এটি নতুন লাইনের পদ্ধতির ধারণার চেয়েও শক্ত ।
ইয়ান রবার্টস

49

এটি করার জন্য আমার পছন্দসই পদ্ধতিটি দেখতে এমন কিছু দেখাচ্ছে:

<xsl:stylesheet>

<xsl:output method='text'/>

<xsl:variable name='newline'><xsl:text>
</xsl:text></xsl:variable>

<!-- note that the layout there is deliberate -->

...

</xsl:stylesheet>

তারপরে, যখনই আপনি একটি নতুন লাইন আউটপুট করতে চান (সম্ভবত সিএসভিতে) আপনি নিম্নলিখিতগুলির মতো কিছু আউটপুট করতে পারেন:

<xsl:value-of select="concat(elem1,elem2,elem3,$newline)" />

এক্সএমএল ইনপুট থেকে এসকিউএল আউটপুট দেওয়ার সময় আমি এই কৌশলটি ব্যবহার করেছি। আসলে, আমি কমা, উদ্ধৃতি এবং নিউলাইনগুলির জন্য ভেরিয়েবল তৈরি করার ঝোঁক।


3
দয়া করে নোট করুন যে নীচে ফ্লোরজনের উত্তর আমার চেয়ে যথেষ্ট স্থিতিশীল।
নিক গিবসন

1
বর্ধিত স্থিতিশীলতার জন্য xml:space="preserve"এটি xsl:textউপাদানটিতে ঘোষণাটি যুক্ত করা সম্ভবত মূল্যবান তবে আমি সম্মত হলাম যে @ ফ্লোরজনের উত্তর সম্ভবত নিরাপদ।
ফ্লাইএন 1179

এই সমাধানটিতে কোনও ইন্ডেন্টেশনও অন্তর্ভুক্ত রয়েছে, যা পছন্দসই নয়।
wmassingham

47

এক্সএসএল: আউটপুট ট্যাগে বৈশিষ্ট্য পদ্ধতি = "পাঠ্য" অন্তর্ভুক্ত করুন এবং উপযুক্ত পয়েন্টগুলিতে এক্সএসএলে আপনার আক্ষরিক বিষয়বস্তুতে নিউলাইনগুলি অন্তর্ভুক্ত করুন। আপনি যদি আপনার এক্সএসএল পরিচ্ছন্নতার উত্স কোডটি রাখতে চান তবে সেই সত্তাটি ব্যবহার করুন &#10;যেখানে আপনি নতুন লাইন চান।


31

তুমি ব্যবহার করতে পার: <xsl:text>&#10;</xsl:text>

উদাহরণ দেখুন

<xsl:variable name="module-info">
  <xsl:value-of select="@name" /> = <xsl:value-of select="@rev" />
  <xsl:text>&#10;</xsl:text>
</xsl:variable>

আপনি যদি ফাইল এ এটি লিখুন

<redirect:write file="temp.prop" append="true">
  <xsl:value-of select="$module-info" />
</redirect:write>

এই ভেরিয়েবলটি একটি নতুন লাইন ছড়িয়ে দেবে যেমন:

commons-dbcp_commons-dbcp = 1.2.2
junit_junit = 4.4
org.easymock_easymock = 2.4

6

আইএমএইচও-র @Florjon দেওয়া ছাড়া আর কোনও তথ্য প্রয়োজন। সম্ভবত কিছু সময় এটি আমাদের জন্য কেন কাজ করে না তা বুঝতে কিছু ছোট বিবরণ বাকী রয়েছে।

প্রথমত, &#xa(হেক্স) বা &#10(ডেস্ক) এর অভ্যন্তরে <xsl:text/>সর্বদা কাজ হবে তবে আপনি এটি দেখতে পাবেন না।

  1. এইচটিএমএল মার্কআপে কোনও নতুন লাইন নেই। একটি সাধারণ ব্যবহার <br/>জরিমানা করবে। অন্যথায় আপনি একটি সাদা স্থান দেখতে পাবেন। ব্রাউজার থেকে উত্সটি দেখাতে আপনাকে বলবে আসলে কী ঘটেছে। তবে এমন কিছু ঘটনা রয়েছে যা আপনি এই আচরণটি প্রত্যাশা করেন, বিশেষত যদি গ্রাহক সরাসরি ব্রাউজার না হন। উদাহরণস্বরূপ, আপনি একটি এইচটিএমএল পৃষ্ঠা তৈরি করতে এবং ব্রাউজারে পরিবেশন করার আগে এর কাঠামোগুলি খালি লাইন এবং আবাসগুলির সাথে সুন্দরভাবে ফর্ম্যাট করতে চান।
  2. আপনাকে কোথায় ব্যবহার করতে হবে disable-output-escapingএবং কোথায় আপনি ব্যবহার করবেন না তা মনে রাখবেন । নীচের উদাহরণটি ধরুন যেখানে আমাকে অন্য থেকে একটি এক্সএমএল তৈরি করতে হয়েছিল এবং স্টাইলশিট থেকে এটির ডিটিডি ঘোষণা করতে হয়েছিল।

প্রথম সংস্করণ অক্ষরগুলি এড়ায় (xsl এর জন্য ডিফল্ট: পাঠ্য)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" encoding="utf-8"/>

    <xsl:template match="/">
        <xsl:text>&lt;!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd"&gt;&#xa;&#xa;&#xd;</xsl:text>
        <xsl:copy>
            <xsl:apply-templates select="*" mode="copy"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="@*|node()" mode="copy">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" mode="copy"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

এবং ফলাফল এখানে:

<?xml version="1.0" encoding="utf-8"?>
&lt;!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd"&gt;

&#13;<Subscriptions>
    <User id="1"/>   
</Subscriptions>

ঠিক আছে, এটি আমাদের প্রত্যাশা মতো করে, পালানোর কাজটি সম্পন্ন হয় যাতে আমরা ব্যবহৃত অক্ষরগুলি সঠিকভাবে প্রদর্শিত হয়। রুট নোডের ভিতরে এক্সএমএল অংশ ফর্ম্যাটিং দ্বারা পরিচালিত হয় ident="yes"তবে আরও ঘনিষ্ঠভাবে আমরা দেখতে পাচ্ছি যে নতুন লাইন চরিত্রটি &#xaরক্ষা পায় নি এবং যেমনটি অনুবাদ করা হয়েছিল, ডাবল লাইনফিড করছে! আমার এ সম্পর্কে কোনও ব্যাখ্যা নেই, তা জেনে রাখা ভাল। যে কেউ?

দ্বিতীয় সংস্করণ অক্ষরগুলি থেকে রেহাই পায় না তাই তারা যা বোঝাতে চাইছে তা তৈরি করছে। পরিবর্তনটি হ'ল:

<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd"&gt;&#xa;&#xa;&#xd;</xsl:text>

এবং ফলাফল এখানে:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Subscriptions SYSTEM "Subscriptions.dtd">

<Subscriptions>
    <User id="1"/>   
</Subscriptions>

এবং এটা ঠিক হবে। Cr এবং lf উভয়ই যথাযথভাবে উপস্থাপন করা হয়।

  1. ভুলবেন না আমরা যে বিষয়ে কথা বলছি nl, না crlf( nl=lf)। আমার প্রথম প্রয়াসটি ছিল কেবলমাত্র cr: &#xdএবং আউটপুট এক্সএমএলটি ডম দ্বারা সঠিকভাবে যাচাই করা হয়েছিল।

আমি একটি দূষিত এক্সএমএল দেখছিলাম:

<?xml version="1.0" encoding="utf-8"?>
<Subscriptions>riptions SYSTEM "Subscriptions.dtd">
    <User id="1"/>   
</Subscriptions>

ডোম পার্সার নিয়ন্ত্রণের অক্ষরগুলিকে অগ্রাহ্য করেছে তবে রেন্ডার হয়নি। আমি কতটা নির্বোধ আমি এটি দেখছি না তা বুঝতে পেরে আমার মাথাটা ঘাড়ে মারতে বেশ কিছুটা সময় কাটিয়েছি!

রেকর্ডের জন্য, আমি উভয় সিআরএলএফ দিয়ে শরীরের অভ্যন্তরে একটি পরিবর্তনশীল ব্যবহার করি এটি 100% নিশ্চিত হওয়ার জন্য এটি যে কোথাও কাজ করবে।


4

DOCTYPEআপনি এখানে দেখুন যে নির্দেশনাটি আমি জুড়েছি :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [
  <!ENTITY nl "&#xa;">
]>
<xsl:stylesheet xmlns:x="http://www.w3.org/2005/02/query-test-XQTSCatalog"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="2.0">

এটি আমাকে আউটপুটটিতে একটি নতুন লাইন উত্পাদন করার &nl;পরিবর্তে ব্যবহার করতে দেয় &#xa;। অন্যান্য সমাধানগুলির মতো এটি সাধারণত একটি <xsl:text>ট্যাগের মধ্যে রাখা হয়।


3

আপনি চেষ্টা করতে পারেন,

<xsl:text>&#xA;</xsl:text>

এটা কাজ করবে।


2

আমি নিক গিবসনের পদ্ধতি দ্বিতীয়, এটি সর্বদা আমার প্রিয় ছিল:

<xsl:variable name='nl'><xsl:text>
</xsl:text></xsl:variable>

তবে আমি স্টাইলশিট তৈরি করতে এবং এগুলি ফাইলের বিরুদ্ধে চালানোর জন্য পিঁপড়া টাস্কটি <echoxML> ব্যবহার করছি। টাস্কটি অ্যাট্রিবিউটের মান টেম্পলেটগুলি করবে, যেমন $ ST DSTAMP}, তবে এটি আপনার এক্সএমএলটিকে পুনরায় ফর্ম্যাট করবে, তাই কিছু ক্ষেত্রে সত্তার রেফারেন্সটি পছন্দনীয়।

<xsl:variable name='nl'><xsl:text>&#xa;</xsl:text></xsl:variable>

3
আপনি যদি ভেরিয়েবল ব্যবহার করেন তবে selectতার পরিবর্তে ব্যবহার করা ভাল xsl:text। উদাহরণ: <xsl:variable name="nl" select="'&#xA;'"/>এইভাবে আপনি অপ্রয়োজনীয় আরটিএফ তৈরি করবেন না (ফলাফল গাছের খণ্ড) fra
ড্যানিয়েল হ্যালি

2

আমি আক্ষরিক নিউলাইনগুলিতে <xsl:text>এবং আক্ষরিক নিউলাইনগুলির ব্যবহারের মধ্যে পার্থক্য পেয়েছি &#xA;

যখন আক্ষরিক নিউলাইনগুলি আমার পরিবেশে দুর্দান্ত কাজ করেছে (স্যাকসন এবং ডিফল্ট জাভা এক্সএসএলটি প্রসেসর উভয়ই ব্যবহার করে) আমার কোড ব্যর্থ হয়েছিল যখন এটি একটি নেট নেটওয়ার্কের পরিবেশে চলমান অন্য গোষ্ঠী দ্বারা কার্যকর করা হয়েছিল।

সত্তায় পরিবর্তন করে ( &#xA;) আমার ফাইল জেনারেশন কোডটি জাভা এবং .NET উভয় ক্ষেত্রে ধারাবাহিকভাবে চলমান running

এছাড়াও, আক্ষরিক নিউলাইনগুলি আইডিই দ্বারা পুনরায় ফর্ম্যাট করার ঝুঁকিপূর্ণ এবং ফাইলটি 'জানা নেই' এর দ্বারা ফাইলটি বজায় রাখলে অসাবধানতাবশত হারিয়ে যেতে পারে।


2

আমি আমার অভিজ্ঞতা যে একটি নতুন লাইন উত্পাদক থেকে খেয়াল করেছি ভিতরে একটি <xsl:variable>দফা কাজ করে না। আমি এরকম কিছু করার চেষ্টা করছিলাম:

<xsl:variable name="myVar">
  <xsl:choose>
    <xsl:when test="@myValue != ''">
      <xsl:text>My value: </xsl:text>
      <xsl:value-of select="@myValue" />
      <xsl:text></xsl:text> <!--NEW LINE-->
      <xsl:text>My other value: </xsl:text>
      <xsl:value-of select="@myOtherValue" />
    </xsl:when>
  </xsl:choose>
<xsl:variable>

<div>
  <xsl:value-of select="$myVar"/>
</div>

এই "নতুন লাইন" (খালি <xsl:text>নোড) এ যা কিছু স্থাপন করার চেষ্টা করেছি তা ঠিক কার্যকর হয়নি (এই পৃষ্ঠার বেশিরভাগ সহজ পরামর্শ সহ) এইচটিএমএল ঠিক সেখানে কাজ করবে না এই বিষয়টি উল্লেখ না করে, অবশেষে আমি এটিকে 2 টি ভেরিয়েবলে বিভক্ত করতে হয়েছিল, তাদেরকে <xsl:variable>সুযোগের বাইরে কল করতে হবে এবং <br/>তাদের মধ্যে একটি সরল রাখতে হবে, যেমন:

<xsl:variable name="myVar1">
  <xsl:choose>
    <xsl:when test="@myValue != ''">
      <xsl:text>My value: </xsl:text>
      <xsl:value-of select="@myValue" />
    </xsl:when>
  </xsl:choose>
<xsl:variable>

<xsl:variable name="myVar2">
  <xsl:choose>
    <xsl:when test="@myValue != ''">
      <xsl:text>My other value: </xsl:text>
      <xsl:value-of select="@myOtherValue" />
    </xsl:when>
  </xsl:choose>
<xsl:variable>

<div>
  <xsl:value-of select="$myVar1"/>
  <br/>
  <xsl:value-of select="$myVar2"/>
</div>

হ্যাঁ, আমি জানি, এটি সর্বাধিক পরিশীলিত সমাধান নয় তবে এটি কাজ করে, এক্সএসএলগুলির সাথে আমার হতাশার অভিজ্ঞতাটি ভাগ করে নিচ্ছেন;)


2

আমি কেবল <xsl:text>&#xa;</xsl:text>পদ্ধতির ব্যবহার করতে পারিনি কারণ আমি যদি এক্সএমএলটি ব্যবহার করে এক্সএমএল ফাইলটি ফর্ম্যাট করি তবে সত্তাটি অদৃশ্য হয়ে যাবে। সুতরাং আমাকে ভেরিয়েবলগুলি ব্যবহার করে অ্যাপ্রোচ সম্পর্কে আরও কিছুটা গোল করতে হয়েছিল

<xsl:variable name="nl" select="'&#10;'"/>
<xsl:template match="/">
    <xsl:value-of select="$nl" disable-output-escaping="no"/>
    <xsl:apply-templates select="*"/>
</xsl:template>

-4

শুধু এই ট্যাগ যুক্ত করুন:

<br/>

এটা আমার জন্য কাজ করে ;) .


7
প্রশ্নটি পাঠ্য আউটপুট সম্পর্কে। আপনার সমাধানটি কেবল তখনই কাজ করবে যদি আউটপুট এইচটিএমএল হিসাবে রেন্ডার করা হত।
ওবল্লিস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.