たとえば、同様のテンプレートを持つファイルがたくさんあります。
<book book_id="foo">
<title>Examples in different languages</title>
<book_section>Tutorials</book_section>
<body>
<p>Some text</p>
<section>
<sectionheader>if</sectionheader>
<sectionbody>
<p>Depending on language you use, the sytax will be different:</p>
<scriptsample>
<language_a>
<block>
<p>
...<br/>
<i>Do a comparation</i><br/>
<b>if</b> (a == b)<br/><br/>
{<br/>
do what you want<br/>
}<br/>
</p>
</block>
</language_a>
<language_b>
<block>
<p>
...<br/>
<i>Do a comparation</i><br/>
<b>if</b> (a == b)<br/><br/>
{<br/>
do what you want<br/>
}<br/>
</p>
</block>
</language_b>
</scriptsample>
</sectionbody>
</section>
<p>Some other text</p>
<section>
<sectionheader>while</sectionheader>
<sectionbody>
<p>Depending on language you use, the sytax will be different:</p>
<scriptsample>
<language_a>
<p>
...<br/>
<i>Do a comparation</i><br/>
<b>while</b> (a == b)<br/><br/>
{<br/>
do what you want<br/>
}<br/>
</p>
</language_a>
<language_b>
<p>
...<br/>
<i>Do a comparation</i><br/>
<b>while</b> (a == b)<br/><br/>
{<br/>
do what you want<br/>
}<br/>
</p>
</language_b>
</scriptsample>
</sectionbody>
</section>
<body>
</book>
(a == b)
ここで、language_b 要素のテキストをcompare(a, b)
ONLY に置き換えたいと思います。
Altova XMLSpy で XPath を使用してすべてのファイルを見つけることができましたが、ファイルを変更できません。
そのための正規表現を作成しようとしましたが、失敗しました。
ところで、もう 1 つの障害は、メソッド呼び出し ( )a
でb
ある可能性があることobj.method(args)
です。したがって、ここで正規表現を使用するのは本当に難しいですが、それは別のタスクです)
また、XQuery Apply Update 要素機能を実行しようとしました (これも Altova XMLSpy にあります):
for $x in //language_b/*[contains(., 'a == b')] return
replace value of node $x with (
replace($x, 'a == b', 'compare(a, b)')
)
ただし、「language_b」内の子要素が失われます。( などi
) nbsp
。また、Altova はファイル全体にデフォルトの属性を追加しますが、無駄な要素が多くて悲しいです。
私の前にそのような仕事がなかったとは思いません。
何か提案はありますか?
PS。現在、C# で DOM を使用して何かを作成しようとしています (ただし、知識が不足しているため、時間がかかります)。