例如,我有很多具有类似模板的文件:
<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)
替换为compare(a, b)
仅限于。{
language_b元素。
我设法在Altova XMLSpy中使用XPath找到所有文件,但我无法更改文件。
我试图为此创建一个正则表达式,但我失败了。
顺便说一下,另一个障碍是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)')
)
但它失去了&#34; language_b&#34;中的子元素。 (例如i
,nbsp
等)。
此外,Altova在整个文件中添加了默认属性,这让我感到难过,因为无用的元素。
我不相信在我之前没有这样的任务。
有什么建议吗?
PS。现在我试图通过在C#中使用DOM来创建一个东西(但是由于缺乏知识需要很长时间)
答案 0 :(得分:0)
尝试使用dom或stax。