【发布时间】:2019-01-17 16:22:07
【问题描述】:
我正在尝试将 xml 转换为 groovy 中 google translate api 的 HTML 标签。由于谷歌翻译非 html 标签,我想将 xml 标签作为属性名称和标签名称作为“p”移动。我已经从我拥有的数据中生成了以下 XML。
<root>
<glossary>
<GlossDiv>
<GlossList>
<element>
<GlossEntry>
<Abbrev>ISO 8879:1986</Abbrev>
<GlossDef>
<GlossSeeAlso>
<element>
<element>GML</element>
<element>XML</element>
</element>
</GlossSeeAlso>
<para>A meta-markup language, used to create markup languages such as DocBook.</para>
</GlossDef>
<GlossSee>markup</GlossSee>
<GlossTerm>Standard Generalized Markup Language</GlossTerm>
</GlossEntry>
</element>
</GlossList>
</GlossDiv>
</glossary>
但我想要输出如下-
<p id="root">
<p id="glossary">
<p id="GlossDiv">
<p id="GlossList">
<p id="element">
<p id="GlossEntry">
<p id="Abbrev">ISO 8879:1986</p>
<p id="GlossDef">
<p id="GlossSeeAlso">
<p id="element">
<p id="element">GML</p>
<p id="element">XML</p>
</p>
</p>
<p id="para">A meta-markup language, used to create markup languages such as DocBook.</p>
</p>
<p id="GlossSee">markup</p>
<p id="GlossTerm">Standard Generalized Markup Language</p>
</p>
</p>
</p>
</p>
</p>
一旦我从 google API 获得翻译后的内容,我想将其转换回原始 XML 格式。我已经尝试了各种 groovy 和 java 代码,但我无法按预期解析 XML。
谁能帮忙?
【问题讨论】:
-
我可能只使用正则表达式:
def newXml = oldXml.replaceAll(/<(\w+)>/, ) { all, group -> "<p id='$group'>" }.replaceAll(/<\/(\w+)>/, ) { all, group -> "</p>" } -
它就像魅力一样。你能帮我做反向映射吗?我不擅长正则表达式。
-
你说的反向映射是什么意思,如果你是指正则表达式的意思,只要检查一下regex101.com你就会得到它的详细解释:regex101.com/r/8hIZ5D/1
-
我希望在获得翻译后的文本内容后将生成的输出转换回原始格式。即
格式。 -
返回的方式更复杂,你可以使用它,但这更像是一个黑客而不是漂亮
def lastTag def oldXml = newXml.replaceAll(/p(?: id=")?(?<tag>\w+)?"?>/, { all, group -> lastTag = (group) ? group : lastTag return "${lastTag}>" })
标签: java xml grails groovy google-translation-api