获取 2 个元素之间的所有元素,包括 Groovy 中的其他元素、值和属性
Get all elements between 2 elements including other elements, values and attributes in Groovy
我有一个 XML 文档,看起来像这样
<home>
<address>
<address1 city="asd">
<Language spoken="English">
<SubLanguages>true</SubLanguages>
</Language>
</address1>
<address1 city="asd1">
<Language spoken="Spanish"/>
</address1>
<address1 city="asd">
<Language spoken="Hebrew"/>
</address1>
</address>
</home>
如您所见,address1 city="asd" 标签在 XML 中出现了两次。我知道理想的方法是在一个 address1 元素下同时包含两个 Language 元素,但不幸的是,现在这是不可能的。
我正在寻找的是一种方法,它可以识别所有带有 city="asd" 的 address1 标签,然后将其下面的所有子元素复制到一个字符串中。
所以基本上,我正在寻找的是一个看起来像
的字符串
<address1 city="asd">
<Language spoken="English">
<SubLanguages>true</SubLanguages>
</Language>
<Language spoken="Hebrew"/>
</address1>
(表示此 XML 的理想方式)
现在,我正在使用 XMLSlurper 解析 XML 并使用 findAll 识别地址 1 中城市标签值为 "asd" 的所有节点。我卡住的地方是如何将每个标签内的其余子元素全部复制为 Strings
这是我关于 SO 的第一个问题,所以如果我不够清楚/错过了一些正确的格式/样式,我提前道歉!
感谢理解!
您可以使用 StreamingMarkupBuilder
将子项插入到新文档中(假设您现有的 xml 位于名为 xml
的变量中):
import groovy.xml.*
def home = new XmlSlurper().parseText(xml)
def newXml = new StreamingMarkupBuilder().bind {
address1(city: 'asd') {
home.address.address1
.findAll { it.@city.text() == 'asd' }
.each { mkp.yield it.children() }
}
}.toString()
我有一个 XML 文档,看起来像这样
<home>
<address>
<address1 city="asd">
<Language spoken="English">
<SubLanguages>true</SubLanguages>
</Language>
</address1>
<address1 city="asd1">
<Language spoken="Spanish"/>
</address1>
<address1 city="asd">
<Language spoken="Hebrew"/>
</address1>
</address>
</home>
如您所见,address1 city="asd" 标签在 XML 中出现了两次。我知道理想的方法是在一个 address1 元素下同时包含两个 Language 元素,但不幸的是,现在这是不可能的。
我正在寻找的是一种方法,它可以识别所有带有 city="asd" 的 address1 标签,然后将其下面的所有子元素复制到一个字符串中。 所以基本上,我正在寻找的是一个看起来像
的字符串<address1 city="asd">
<Language spoken="English">
<SubLanguages>true</SubLanguages>
</Language>
<Language spoken="Hebrew"/>
</address1>
(表示此 XML 的理想方式)
现在,我正在使用 XMLSlurper 解析 XML 并使用 findAll 识别地址 1 中城市标签值为 "asd" 的所有节点。我卡住的地方是如何将每个标签内的其余子元素全部复制为 Strings
这是我关于 SO 的第一个问题,所以如果我不够清楚/错过了一些正确的格式/样式,我提前道歉! 感谢理解!
您可以使用 StreamingMarkupBuilder
将子项插入到新文档中(假设您现有的 xml 位于名为 xml
的变量中):
import groovy.xml.*
def home = new XmlSlurper().parseText(xml)
def newXml = new StreamingMarkupBuilder().bind {
address1(city: 'asd') {
home.address.address1
.findAll { it.@city.text() == 'asd' }
.each { mkp.yield it.children() }
}
}.toString()