এক্সএমএল কমান্ড লাইন (শেল স্ক্রিপ্ট) ম্যানিপুলেশন


9

শেল স্ক্রিপ্টে কমান্ড লাইন থেকে এক্সএমএল কীভাবে পরিচালনা করবেন?

ট্যাবুলার ডেটা ম্যানিপুলেট করার জন্য, পরিবেশের পরিবর্তনশীলকে প্রতিস্থাপন করার জন্য বা পাঠ্যের টুকরোগুলিকে রিজেক্সের সাথে প্রতিস্থাপনের জন্য অনেক কমান্ড রয়েছে তবে এক্সএমএলের জন্য আমি কিছু পাইনি।

আমার বিল্ড স্ক্রিপ্টটি এক্সএমএল ডকুমেন্টের মূল ট্যাগের মধ্যে লিখিত সামগ্রী সহ একটি ট্যাগ সন্নিবেশ করা দরকার, এবং আমি ওএসে জাভা, পার্ল বা পাইথন ইনস্টল করার জন্য একটি ওভারকিল পেয়েছি (আমার স্ক্রিপ্টগুলি ডকারের চিত্রগুলির সাথে গিটল্যাবে করা হয়, তাই করছে) ম্যাভেনে উপলব্ধ সরঞ্জামগুলির সাথে আমার কাজ: 3.5-জেডি কে -8 চিত্রটি একটি স্বপ্ন হবে)।

আমি এক্সএমএলকে সেডের সাথে চালিত করতে চাই না, যদিও আমার বিল্ড স্ক্রিপ্টে এটি কাজ করবে, কারণ এটি মন্দ

উদাহরণ: আমার কাছে নিম্নলিখিত এক্সএমএল রয়েছে:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>  
  <!-- a lot of other tags-->
</project>  

এবং আমি নিম্নলিখিত ব্লকটি সন্নিবেশ করতে চাই:

<distributionManagement>
    <repository>
        <id>private-releases</id>
        <url>https://my.private.server.com/nexus/repository/maven-releases/</url>
    </repository>
</distributionManagement>

প্রকল্পের ট্যাগের ভিতরে (এবং এটি শুরুতে বা শেষের দিকে হবে কিনা তা সম্পূর্ণ বিবেচনা করে না।


আপনার ইনপুট এক্সএমএল এবং প্রত্যাশিত আউটপুট পোস্ট করুন
রোমানপেরেখারেস্ট

সুতরাং নির্দিষ্ট প্রয়োজনীয়তাগুলি হ'ল এক্সএমএল পার্সারের জন্য যা কমান্ড লাইন থেকে আহ্বান করা যেতে পারে যা কোনও বড় স্ক্রিপ্টিং ভাষায় প্রয়োগ করা হয় না, তবে একটি ফ্রিস্ট্যান্ডিং সি বা সি ++ (বা অন্যান্য সংকলিত) ইউটিলিটি?
কুসালানন্দ

@ কুসালন্দা আমি উল্লেখ করেছি যে আমি ডকারের পাত্রেই স্কিপগুলি চালাচ্ছি, সুতরাং ডকারের চিত্রটিতে যতটা সম্ভব কম যোগ করা আমার পক্ষে সবচেয়ে গুরুত্বপূর্ণ।
િલ્সডেক্স

আপনার যদি ম্যাভেন এবং একটি জেডিকে সহ কোনও চিত্র থাকে তবে জাভা আমার কাছে সেরা বিকল্প হিসাবে মনে হচ্ছে .... আপনি কেন জাভা হেভিওয়েটকে এই ক্ষেত্রে বিবেচনা করবেন?
ড্যানিয়েল প্রাইডেন

স্ট্যাক ওভারফ্লোতে এই প্রশ্নটি জিজ্ঞাসা করা এবং ট্যাগিংয়ের পক্ষে সম্ভবত maven- আমি সন্দেহ করি যে আপনি মাভেনের মধ্যে যা করার চেষ্টা করছেন তা করার আরও ভাল উপায় আছে।
ড্যানিয়েল প্রাইডেন

উত্তর:


10

এক্সএমএল স্টারলেট ( http://xMLstar.sourceforge.net/overview.php ) সি তে লেখা এবং ব্যবহার করে libxml2এবং libxslt

এক্সএমএল ডকুমেন্ট দেওয়া হয়েছে

<?xml version="1.0"?>
<root>
  <tag>data</tag>
</root>

একটি সাবনেড rootব্যবহার করে be োকানো যেতে পারে

xml ed -s '/root' -t elem -n 'newtag' -v 'newdata' file.xml

যা উত্পাদন করে

<?xml version="1.0"?>
<root>
  <tag>data</tag>
  <newtag>newdata</newtag>
</root>

অনেকগুলি জিনিস সন্নিবেশ করা হচ্ছে ( file.xmlউপরে উপরে মূলটি ব্যবহার করে ):

xml ed -s '/root' -t elem -n 'newtag' \
       -s '/root/newtag' -t elem -n 'subtag' -v 'subdata' file.xml

এটি উত্পাদন করে

<?xml version="1.0"?>
<root>
  <tag>data</tag>
  <newtag>
    <subtag>subdata</subtag>
  </newtag>
</root>

প্রশ্নের উদাহরণের জন্য:

xml ed -N x="http://maven.apache.org/POM/4.0.0" \
       -s '/x:project' -t elem -n 'distributionManagement' \
       -s '/x:project/distributionManagement' -t elem -n 'repository' \
       -s '/x:project/distributionManagement/repository' -t elem -n 'id' \
         -v 'private-releases' \
       -s '/x:project/distributionManagement/repository' -t elem -n 'url' \
         -v 'https://my.private.server.com/nexus/repository/maven-releases/' \
    file.xml

ফলাফল:

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <!-- a lot of other tags-->
  <distributionManagement>
    <repository>
      <id>private-releases</id>
      <url>https://my.private.server.com/nexus/repository/maven-releases/</url>
    </repository>
  </distributionManagement>
</project>

এক্সএমএল-এর কোনও স্থানে পূর্বে প্রস্তুত XML ফাইল সন্নিবেশ করানো:

প্রশ্ন থেকে মূল এক্সএমএল ধরে নেওয়া যাক রয়েছে file.xmlএবং অতিরিক্ত বিট যে নতুন যেতে হবে distributinManagementনোড আছে new.xml(কিন্তু না নোড ট্যাগ নিজেই), একটি নিম্নলিখিত করতে পারে সন্নিবেশ করতে new.xmlরুট নোড মধ্যে:

xml ed -N x="http://maven.apache.org/POM/4.0.0" \
       -s '/x:project' -t elem -n 'distributionManagement' \
       -v "$(<new.xml)" file.xml | xml unesc | xml fo

এক্সএমএল স্টারলেট স্বয়ংক্রিয়ভাবে এমন ডেটা থেকে রক্ষা পাবে যা পালানোর দরকার হয় যেমন অক্ষর <এবং >অক্ষর। xml unescবিট unescapes সন্নিবেশিত তথ্য (এটা আসলে পুরো ডকুমেন্ট, যা বা একটি বিষয় হতে পারে না unescapes), এবং xml foreformats ফলে XML দস্তাবেজে।

ফলাফল হলো

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <!-- a lot of other tags-->
  <distributionManagement>
    <repository>
      <id>private-releases</id>
      <url>https://my.private.server.com/nexus/repository/maven-releases/</url>
    </repository>
  </distributionManagement>
</project>

এইভাবে এটি করা সম্পর্কে আমি কিছুটা অস্বস্তি, "তবে এটি কার্যকর"।

এই সম্পর্কিত প্রশ্নটি স্ট্যাকওভারফ্লোতেও দেখুন: /programming/29298507/xmlstarlet-xincolve-xslt


এটি আকর্ষণীয় দেখায়, যদিও একাধিক একক ট্যাগ সন্নিবেশ করার জন্য সিনট্যাক্সটি বেশ দীর্ঘ। উবুন্টুতে কেবল এটির নাম দেওয়া হয়েছে 'xMLstarlet'। ট্যাগ হিসাবে অন্য ফাইলের বিষয়বস্তু asোকানো সম্ভব, এই বিষয়বস্তুটি একটি বৈধ এক্সএমএল?
ইএসডিএক্স

@ 9ilsdx9rvj0lo আপডেট উত্তর দেখুন।
কুসালানন্দ

"এটি প্রকৃতপক্ষে পুরো দস্তাবেজটিকে অনস্কেপ করে যা কোনও সমস্যা হতে পারে বা নাও হতে পারে"। হ্যাঁ বিশাল সমস্যা, সমস্ত বিদ্যমান & amp; এক্সএমএলকে আর বৈধ হতে না দেওয়ার কারণে এনকোনড করা হয়েছে :(
ছিনিয়ে নিন

1

আমি সেই উদ্দেশ্যে ওএসে জাভা, পার্ল বা পাইথন ইনস্টল করার জন্য একটি ওভারকিল পেয়েছি (আমার স্ক্রিপ্টগুলি ডোকর ইমেজের সাহায্যে গিতল্যাবে করা হয়, সুতরাং মাভেনে উপলব্ধ সরঞ্জামগুলির সাথে আমার কাজ করা একটি স্বপ্ন হবে)।

এটি সম্ভবত এখনও ওভারকিল, তবে আপনি কেবল ধারক আকারের সাথে সম্পর্কিত হলে লুয়া বা গাইলের মতো খুব হালকা ওজনের ভাষা ব্যবহার করতে পারেন।

লুয়া ডক্স থেকে:

কোনও অ্যাপ্লিকেশনটিতে লুয়া যুক্ত করা এটি ফুলে যায় না। লুয়া 5.3.4-এর টারবাল, এতে সোর্স কোড এবং ডকুমেন্টেশন রয়েছে, 297 কে সংক্ষেপিত এবং 1.1 এম সঙ্কুচিত লাগে। উত্সটিতে প্রায় 24000 লাইন সি রয়েছে, 64৪-বিট লিনাক্সের অধীনে, সমস্ত স্ট্যান্ডার্ড লুয়া লাইব্রেরি দিয়ে নির্মিত লুয়া ইন্টারপ্রেটারটি 246 কে এবং লুয়া গ্রন্থাগারটি 421K লাগে।


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