2015-03-24 127 views
1

我使用的是groovy,所以Java實現也可以。用元素節點替換XML文本節點

"""<TextFlow fontFamily="Arial" fontSize="20"><span>before</span>Less than 7 days<span>after</span></TextFlow>""" 

我想換行第一級文本節點與標籤。所以我想得到

"""<TextFlow fontFamily="Arial" fontSize="20"><span>before</span><span>Less than 7 days</span><span>after</span></TextFlow>""" 

我已經看過XmlSlurper不處理文本節點。我也研究過可以處理文本節點的XmlParser,但我不知道如何用xml元素替換它。請指教。

回答

1

這爲我工作,希望它會幫助別人

@Grab('org.jdom:jdom2:2.0.5') 
@Grab('jaxen:jaxen:1.1.4') 
@GrabExclude('jdom:jdom') 

import org.jdom2.* 
import org.jdom2.input.* 
import org.jdom2.xpath.* 
import org.jdom2.output.* 

def xml = """<TextFlow fontFamily="Arial" fontSize="20"><span>before</span>Less than 7 days<span>after</span></TextFlow>""" 

Document doc = new SAXBuilder().build(new StringReader(xml)) 
def urls = XPathFactory.instance().compile('//TextFlow/text()').evaluate(doc) 

for(def c in urls) { 
    int pos = c.parent.content.indexOf(c)  
    Element span = new Element("span") 
    span.text = c.text 
    c.parent.setContent(pos, span) 

} 

new XMLOutputter().with { 
    format = Format.getRawFormat() 
    format.setLineSeparator(LineSeparator.NONE) 
    // XmlOutputter can write to OutputStream or Writer, which is sufficient for most cases 
    output(doc, System.out) 
}