সমান সমান
আপনি বাশ ফাংশনটি সংজ্ঞায়িত করতে পারেন, "xp" ("xpath") বলুন যা কিছু পাইথন 3 কোডটি মোড় করে। এটি ব্যবহার করতে আপনাকে পাইথন 3 এবং পাইথন-এলএক্সএমএল ইনস্টল করতে হবে। উপকারিতা:
- রেজেক্স ম্যাচিং যা আপনার অভাব যেমন উদাহরণস্বরূপ xmllint।
- কমান্ডলাইনে ফিল্টার হিসাবে (পাইপেতে) ব্যবহার করুন
এটি ব্যবহার করা সহজ এবং শক্তিশালী:
xmldoc=$(cat <<EOF
<?xml version="1.0" encoding="utf-8"?>
<job xmlns="http://www.sample.com/">programming</job>
EOF
)
selection='//*[namespace-uri()="http://www.sample.com/" and local-name()="job" and re:test(.,"^pro.*ing$")]/text()'
echo "$xmldoc" | xp "$selection"
# prints programming
xp () এর মতো কিছু দেখাচ্ছে:
xp()
{
local selection="$1";
local xmldoc;
if ! [[ -t 0 ]]; then
read -rd '' xmldoc;
else
xmldoc="$2";
fi;
python3 <(printf '%b' "from lxml.html import tostring\nfrom lxml import etree\nfrom sys import stdin\nregexpNS = \"http://exslt.org/regular-expressions\"\ntree = etree.parse(stdin)\nfor e in tree.xpath('""$selection""', namespaces={'re':regexpNS}):\n if isinstance(e, str):\n print(e)\n else:\n print(tostring(e).decode('UTF-8'))") <<< "$xmldoc"
}
সেড সমতুল্য
এক্সকিউ ব্যবহার করার কথা বিবেচনা করুন যা আপনাকে জেকিউ "প্রোগ্রামিং ভাষা" এর পুরো শক্তি দেয়। আপনার যদি পাইথন-পাইপ ইনস্টল করা থাকে তবে আপনি পিপ ইনস্টল ইয়্যাকের সাথে এক্সকিউ ইনস্টল করতে পারেন , তবে নীচের উদাহরণে আমরা "কিপ অ্যাকাউন্ট 2" এর সাথে "অ্যাকাউন্টগুলি রাখুন" প্রতিস্থাপন করছি:
xmldoc=$(cat <<'EOF'
<resources>
<string name="app_name">Keep Accounts</string>
<string name="login">"login"</string>
<string name="login_password">"password:"</string>
<string name="login_account_hint">input to login</string>
<string name="login_password_hint">input your password</string>
<string name="login_fail">login failed</string>
</resources>
EOF
)
echo "$xmldoc" | xq '.resources.string = ([.resources.string[]|select(."#text" == "Keep Accounts") ."#text" = "Keep Accounts 2"])' -x