2013-10-09 3 views
0

Попытка добавить & в качестве одного из значения элемента, но StreamMarkupBuilder не признает & или &
КодексДобавление специального символа в XML

def buildXml { 
    def requestXml = { 
    RootElement { 
     Element1("&Value1") 
     Element2("Value2") 
    } 
    } 
return new StreamingMarkupBuilder().bind(requestXml) 
} 

Выход

<RootElement> 
    <Element1>&amp;Value1</Element1> 
    <Element2>Value2</Element2> 
</RootElement> 

Ожидаемый результат

<RootElement> 
     <Element1>&Value1</Element1> 
     <Element2>Value2</Element2> 
</RootElement> 

я наткнулся на setEscapeAttributes() метод MarkupBuilder «s. Док говорит

Defaults to true. If set to false then you must escape any special characters within attribute values such as '&', '<', CR/LF, single and double quotes etc. manually as needed. The builder will not guard against producing invalid XML when in this mode and the output may not be able to be parsed/round-tripped but it does give you full control when producing for instance HTML output. 

Ищете что-то похожее на StreamMarkupBuilder

+0

Это правильный выход. Что вы ожидаете? –

+0

@JimGarrison Добавлен ожидаемый выход. –

+0

Ожидаемый результат не XML, так как он не является корректным. Необязательные символы '&' недопустимы. – mzjn

ответ

1

Вы должны быть хорошо с тем, что у вас есть. Я второй Джим и мзин. В конечном счете, унаследованная система будет разборе XML, чтобы получить ожидаемый начать с &:

def requestXml = { 
    RootElement { 
    Element1("&Value1") 
    Element2("Value2") 
    } 
} 

def xml = new groovy.xml.StreamingMarkupBuilder().bind(requestXml) 

//Legacy backend reading/parsing the xml 
//should reads escaped characters appropriately. 
def slurper = new XmlSlurper().parseText(xml.toString()) 
assert slurper.Element1 == "&Value1" 
Смежные вопросы