POST数据中的嵌套XML由第三方应用程序解析,如何防止这种情况?

时间:2014-09-16 20:15:08

标签: xml parsing

我正在尝试使用API​​来更新应用程序中的某些内容。它将数据作为XML。其中一个必填字段实际存储XML。我有一些问题。如果有人能想到这个帖子或更好标签的更好名称,请更新它...这是我能做的最好的。

从DB开始(prfx_xml是有效的xml):

PRFX_ID       PRFX_NAME        PRFX_XML
1             thing_one        <stuff><idk>123</idk><val>ABC</val></stuff>

我需要以XML格式发送内容....

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<entry xmlns="http://purl.org/atom/ns#">   
    <ns:PRFX.update xmlns:tes="http://www.zzz.com/client/nsservlet"> 
            <ns:id>1</ns:id>
            <ns:name>thing_one</ns:name>
            <ns:xmldata>
                <stuff><idk>123</idk><val>ABC</val></stuff>  <!-- This needs to be stored as a string value in the DB -->
            </ns:xmldata>
        </ns:PRFX> 
    </ns:PRFX.update> 
</entry>

XML在发送之前编码为ISO-8859-1。我假设应用程序解码它然后解析XML。当它执行此操作时,它还会解析出xmldata字段。当这篇文章发布到数据库时,我留下了:

PRFX_ID       PRFX_NAME        PRFX_XML
1             thing_one        123ABC

我该怎么办? 如何强制它以字符串形式接收?我可以访问第三方应用程序的后端,但它是Java版本,我甚至不知道从哪里开始。 jar和.war的。我对XML的了解有限。添加命名空间会有帮助吗?应用程序是否仍然能够理解它的内容?如果我使用引号,它会在数据库中存储引号。我尝试单独编码嵌套的XML,但也没有用。

想法?

1 个答案:

答案 0 :(得分:1)

基于服务似乎正在查看您正在发送的XML内部这一事实,我建议您尝试使用CDATA进行处理,以防止服务进入内部。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<entry xmlns="http://purl.org/atom/ns#">   
    <ns:PRFX.update xmlns:tes="http://www.zzz.com/client/nsservlet"> 
            <ns:id>1</ns:id>
            <ns:name>thing_one</ns:name>
            <ns:xmldata>
                <![CDATA[<stuff><idk>123</idk><val>ABC</val></stuff>]]>
            </ns:xmldata>
        </ns:PRFX> 
    </ns:PRFX.update> 
</entry>

但这只是猜测。在这种情况下,正确的操作是找出服务想要看到的内容。