-1
例如,我有很多的文件具有類似的模板:有一個簡單的方法在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>
現在,我想與compare(a, b)
替換的文本(a == b)
僅在 language_b元素中。
我設法通過在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來創建一些東西(但由於缺乏知識需要很長時間)
確定你想要使用的編程環境,然後給它一個搜索。它之前已經被問及過很多次。 – Gordon
我會發布一些代碼片段來做到這一點在xpath和vtd-xml ..但你必須提供一個更具體的例子是什麼替代標準是... –