Например, у меня есть много файлов с подобным шаблоном:Есть простой способ заменить текст в определенном узле XML
<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 .
Мне удалось найти все файлы с помощью XPath в Altova XMLSpy, но я не могу изменить файлы.
Я попытался создать для этого регулярное выражение, но мне не удалось.
Кстати, еще одним препятствием является то, что 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. Теперь я пытаюсь создать что-то, используя DOM в C# (но из-за недостатка знаний это займет много времени).
Решите, какую среду программирования вы хотите использовать, а затем дайте ей поиск. Его спрашивали и много раз говорили. – Gordon
Я отправлю фрагмент кода, чтобы сделать это в xpath и vtd-xml .. но вы должны предоставить более конкретный пример того, что критерии замены ... –