এক্সএমএল ফাইলের সংখ্যাগুলি তাদের ডাবল মান সহ কীভাবে প্রতিস্থাপন করবেন?


1

ইনপুট ফাইল "ইনপুট.এক্সএমএল":

<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>

আমি প্রতিটি সংখ্যার মানটি 2 দ্বারা গুণিত করতে চাই

<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

কিভাবে যে কি?


একটি এক্সএমএল পার্সার ব্যবহার করুন
fedorqui

1
লোকেরা, পাঠ্য বিশ্লেষণ প্রশ্ন বন্ধ করে ভোট বন্ধ করুন! তারা না।
টেরডন

উত্তর:


2

সাধারণভাবে, আপনার নিয়মিত এক্সপ্রেশন ব্যবহার করে এইচটিএমএল / এক্সএমএল বিশ্লেষণ করা উচিত নয়

তবে, যদি আপনার ইনপুট ফাইলটি বাস্তবে উদাহরণের মধ্যে দেখানো মত হয় (প্রতিটি লাইনে একটি একক খোলার এবং সমাপনী ট্যাগ এবং >খোলার ট্যাগের শেষের আগে কোনও অক্ষর নেই ), পার্ল ব্যবহার করে:

perl -pe 's/>([0-9]+)/">".$1*2/e' in
  • s: একটি প্রতিস্থাপন সম্পাদন করার জন্য জোর দেয়
  • /: প্যাটার্ন শুরু
  • >: একটি >চরিত্রের সাথে মেলে
  • ([0-9]+): ম্যাচ এবং গ্রুপ এক বা একাধিক সংখ্যা groups
  • /: প্যাটার্নটি থামায় / প্রতিস্থাপনের স্ট্রিং শুরু করে
  • ">".$1*2: প্রকাশ; দুটি স্ট্রিং, একটি >অক্ষর এবং প্রথম বন্দী গোষ্ঠীর সংখ্যাবৃদ্ধি2
  • /: প্রতিস্থাপনের স্ট্রিং থামায় / প্যাটার্ন পতাকাগুলি শুরু করে
  • e: প্রতিস্থাপন স্ট্রিং মূল্যায়ন জোর দেয়
% cat in
<integer name="leftValue">30</integer>
<integer name="rightValue">580</integer>
<integer name="rightValueDefault">495</integer>
% perl -pe 's/>([0-9]+)/">".$1*2/e' in
<integer name="leftValue">60</integer>
<integer name="rightValue">1160</integer>
<integer name="rightValueDefault">990</integer>

এটি নিখুঁত, আমরা কি একই সাথে অর্জন করতে পারি না awkবা sed?
স্নুপ

@ স্নুপের sedপ্রতিস্থাপনের স্ট্রিংয়ে অভিব্যক্তিগুলি মূল্যায়নের একটি বিকল্প রয়েছে তবে প্রচুর লোক আপাতদৃষ্টিতে এটি ব্যবহার করার পরেও আমি এটি কাজ করতে পারিনি। সঙ্গে awkহ্যাঁ, কিন্তু আবার, এই হল খুব : আপনার ইনপুট নির্দিষ্টawk '{x=$0; gsub(/<[^>]*>/, ""); gsub(/>[0-9]+/, ">"$0*2,x); print x}' in
কস

1
@ স্নুপ: যদি এই উত্তরটি আপনাকে সহায়তা করে, তবে এই পাঠ্যের বামদিকে ধূসর click ক্লিক করতে ভুলবেন না , যার অর্থ হ্যাঁ, এই উত্তরটি বৈধ ! ;-)
ফ্যাবি

Eek! এক্সএমএল পার্স করার জন্য নিয়মিত প্রকাশের সুপারিশ করার জন্য ডাউন-ভোট দিয়েছেন। ;
ডেভিড ফোস্টার

@ ডেভিডফোস্টার মন্তব্য করার জন্য এবং ডাউনওয়েটটি ব্যাখ্যা করার জন্য ধন্যবাদ, তবে আমি এক্সএমএল পার্স করার জন্য রেজিক্সগুলি ব্যবহার করার পরামর্শ দিইনি। আমি প্রথম বিবৃতিতে বর্ণিত হিসাবে আমি স্যাম্পল ইনপুটটিতে সঠিক ফাইলটি বিশ্লেষণের একটি উপায় সরবরাহ করেছি। জটিল এইচটিএমএল / এক্সএমএল জন্য এটি সাধারণভাবে সত্য, তবে প্রশ্নযুক্ত ফাইলের জন্য নয়, যদি না দেখি কোথায় এটি ভেঙে যেতে পারে।
কোস

3

সঠিক XML পার্সার ব্যবহার করুন। উদাহরণস্বরূপ, এক্সএক্সে , আপনি কেবল লিখতে পারেন

open input.xml ;
for //text if (. > 0) set . (2 * .) ;
save :b ;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.