Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy XmlSlurper解析混合文本和节点_Xml_Groovy_Xml Parsing_Xmlslurper - Fatal编程技术网

Groovy XmlSlurper解析混合文本和节点

Groovy XmlSlurper解析混合文本和节点,xml,groovy,xml-parsing,xmlslurper,Xml,Groovy,Xml Parsing,Xmlslurper,我目前正在尝试解析groovy中的一个节点,该节点包含混合文本和带文本的节点,我需要以正确的顺序获取文本,例如: <?xml version="1.0" encoding="UTF-8"?> <root> <p> The text has <strong>nodes</strong> which need to get parsed </p> </root>

我目前正在尝试解析groovy中的一个节点,该节点包含混合文本和带文本的节点,我需要以正确的顺序获取文本,例如:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <p>
      The text has
      <strong>nodes</strong>
      which need to get parsed
   </p>
</root>


文本已被删除
节点
哪些需要被解析

现在我想对它进行解析,这样我就可以得到整个文本,但仍然可以编辑节点。 在本例中,我希望得到以下结果:

The text has <b>nodes</b> which need to get parsed
Text: The text has
Node: nodes
Text: which need to get parsed
文本有需要解析的节点

如果我能得到
p
下所有元素的列表,在那里我可以测试它是否是一个节点或文本,我会很高兴,但我找不到任何方法得到它。

这里有一个工作示例:

def txt = '''
<root>
   <p>
      <![CDATA[The text has <strong>nodes</strong> which need to get parsed]]>
   </p>
</root>
'''
def parsed = new XmlSlurper(false,false).parseText(txt)
assert parsed.p[0].text().trim() == 'The text has <strong>nodes</strong> which need to get parsed'
def txt=''

需要解析的节点。]>

''' def parsed=new-XmlSlurper(false,false).parseText(txt) assert parsed.p[0].text().trim()==“文本具有需要解析的节点”

我想没有CDATA标签是不可能的。

您可以像这样使用XmlUtil和XmlParser:

import groovy.xml.*

def xml = '''<?xml version="1.0" encoding="UTF-8"?>
<root>
   <p>
      The text has
      <strong>nodes</strong>
      which need to get parsed
   </p>
</root>'''

println XmlUtil.serialize(new XmlParser().parseText(xml).p[0])
导入groovy.xml* def xml='' 文本已被删除 节点 哪些需要被解析

''' println XmlUtil.serialize(新的XmlParser().parseText(xml).p[0])
好的,我找到了一个不用任何(棘手的)解决办法就可以使用的解决方案。 问题是,
NodeChild
没有一个方法可以同时提供子文本和子节点,但是
节点可以。只需使用
childNodes()
(因为slurper会给您一个
NodeChild

这给了我一个结果:

The text has <b>nodes</b> which need to get parsed
Text: The text has
Node: nodes
Text: which need to get parsed

这意味着我可以轻松地对我的节点执行任何我想执行的操作,而它们与文本的顺序仍然正确

如果我理解正确,“CDATA”标记会告诉他“按原样”阅读,而不解析节点,对吗?问题是,我无法在不修改xmlYes的情况下操作我必须处理的数据,这就是CDATA的目的。问题是这不是一个有效的XML文件。不知道如何在不改变的情况下处理它。XML是完全有效的Hanks@tim_yates。不使用CDATA就可以解析它吗?