例如,我有很多具有类似模板的文件:
<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>
现在,我想在 language_b 元素(a == b)
中用compare(a, b)
ONLY 替换文本。
我设法在 Altova XMLSpy 中使用 XPath 找到了所有文件,但我无法更改文件。
我试图为此创建一个正则表达式,但我失败了。
顺便说一句,另一个障碍是a
方法b
调用(obj.method(args)
)。所以在这里使用正则表达式真的很难,但这是另一项任务)
我还尝试做一个 XQuery 应用更新元素功能(也在 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 创建一个东西(但由于缺乏知识,这需要很长时间)