是否有一种简单的方法来替换xml的特定节点中的文本

时间:2016-07-28 05:54:34

标签: xml xmlspy

例如,我有很多具有类似模板的文件:

<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>
                                &nbsp;&nbsp;...<br/>
                                &nbsp;&nbsp;<i>Do a comparation</i><br/>
                                &nbsp;&nbsp;<b>if</b> (a == b)<br/><br/>
                                &nbsp;&nbsp;{<br/>
                                &nbsp;&nbsp;&nbsp;&nbsp;do what you want<br/>
                                &nbsp;&nbsp;}<br/>
                            </p>
                        </block>
                    </language_a>
                    <language_b>
                        <block>
                            <p>
                                &nbsp;&nbsp;...<br/>
                                &nbsp;&nbsp;<i>Do a comparation</i><br/>
                                &nbsp;&nbsp;<b>if</b> (a == b)<br/><br/>
                                &nbsp;&nbsp;{<br/>
                                &nbsp;&nbsp;&nbsp;&nbsp;do what you want<br/>
                                &nbsp;&nbsp;}<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>
                                &nbsp;&nbsp;...<br/>
                                &nbsp;&nbsp;<i>Do a comparation</i><br/>
                                &nbsp;&nbsp;<b>while</b> (a == b)<br/><br/>
                                &nbsp;&nbsp;{<br/>
                                &nbsp;&nbsp;&nbsp;&nbsp;do what you want<br/>
                                &nbsp;&nbsp;}<br/>
                            </p>
                    </language_a>
                    <language_b>
                            <p>
                                &nbsp;&nbsp;...<br/>
                                &nbsp;&nbsp;<i>Do a comparation</i><br/>
                                &nbsp;&nbsp;<b>while</b> (a == b)<br/><br/>
                                &nbsp;&nbsp;{<br/>
                                &nbsp;&nbsp;&nbsp;&nbsp;do what you want<br/>
                                &nbsp;&nbsp;}<br/>
                            </p>
                    </language_b>
                </scriptsample>
            </sectionbody>
        </section>
    <body>
</book>

现在,我想将文本(a == b)替换为compare(a, b)仅限于。{ language_b元素。

我设法在Altova XMLSpy中使用XPath找到所有文件,但我无法更改文件。

我试图为此创建一个正则表达式,但我失败了。

顺便说一下,另一个障碍是ab可以是方法调用(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;中的子元素。 (例如inbsp等)。 此外,Altova在整个文件中添加了默认属性,这让我感到难过,因为无用的元素。

我不相信在我之前没有这样的任务。

有什么建议吗?

PS。现在我试图通过在C#中使用DOM来创建一个东西(但是由于缺乏知识需要很长时间)

1 个答案:

答案 0 :(得分:0)

尝试使用dom或stax。