当前位置:  开发笔记 > 编程语言 > 正文

你怎么能在网页上编辑有效的XML?

如何解决《你怎么能在网页上编辑有效的XML?》经验,为你挑选了2个好方法。

我必须启动并运行快速而脏的配置编辑器.流程如下:

配置(服务器上的POCO)序列化为XML.
此时XML已经很好地形成了.配置将发送到XElements中的Web服务器.
在Web服务器上,XML(是,所有IT)被转储到textarea中进行编辑.
用户直接在网页中编辑XML并单击"提交".
在响应中,我检索XML配置的更改文本.此时,所有转义都已通过在网页中显示它们的过程恢复.
我尝试将字符串加载到XML对象(XmlElement,XElement,等等).KABOOM.

问题是序列化会转义属性字符串,但在转换过程中会丢失.

例如,假设我有一个具有正则表达式的对象.以下是Web服务器的配置:


  

所以,我把它放到textarea中,它对用户来说是这样的:


  

因此,用户稍作修改并将更改提交回来.在Web服务器上,响应字符串如下所示:


  
  

因此,用户添加了另一个验证器,现在BOTH具有非法字符的属性.如果我尝试将其加载到任何XML对象中,它会抛出异常,因为<和&在文本字符串中无效.我不能不能使用任何类型的编码功能,因为它编码整个血腥的东西:

var result = Server.HttpEncode(editedConfig);

结果是

<Configuration>
  <Validator Expression="[^<]" />
  <Validator Expression="[^&]" />
</Configuration>

这不是有效的XML.如果我尝试将其加载到任何类型的XML元素中,我将会被一个下降的铁砧击中.我不喜欢掉落的铁砧.

那么,问题仍然存在......我是否可以通过使用正则表达式替换来获得解析为XML对象的XML字符串的唯一方法?我加载时有没有办法"关闭约束"?你怎么绕过这个?


最后一个回应,然后维基化,因为我认为没有一个有效的答案.

我在textarea中放置的XML是有效的,转义的XML.1)将其放入文本区域的过程2)将其发送给客户端3)将其显示给客户端4)提交表单,然后将其发送回服务器,以及6)从表格中检索值REMOVES任何和所有逃脱.

让我再说一遍:我不会逃避任何事情.只需在浏览器中显示它就可以了!

需要考虑的事项:有没有办法阻止这种逃避行为的发生?有没有办法采用几乎有效的XML并以安全的方式"清理"它?


这个问题现在有了它的赏金.要收集赏金,您将演示如何在浏览器窗口中编辑VALID XML而不使用第三方/开源工具,该工具不需要我使用正则表达式手动转义属性值,这不需要用户转义其属性,并且在往返时不会失败(& amp; amp; amp; etc;)



1> Konrad Rudol..:

呃......  怎么序列化?通常,XML序列化程序永远不应生成无效的XML.

/编辑回应您的更新:不要显示无效XML到您的用户编辑!而是在TextBox中显示正确转义的XML.修复损坏的XML并不好玩,我实际上没有理由不以有效的转义形式显示/编辑XML.

我再次问:你如何在TextBox中显示XML?您似乎故意在某些时候忽略XML.

/编辑以回应您的最新评论:是的,显然,因为它可以包含HTML.在将XML写入HTML页面之前,您需要正确地转义XML.有了它,我的意思是整个 XML.所以这:


成为这个:

<foo mean-attribute="&<">



2> bobince..:

当然,当你将实体引用放在textarea中时,它们就会没有转义.Textareas不是魔法,你必须逃避; 你所放入的所有东西就像其他元素一样.浏览器可能会在textarea中显示原始的"<",但这只是因为他们正在尝试清除您的错误.

因此,如果您将可编辑的XML放在textarea中,则需要转义属性值一次以使其成为有效的XML,然后您必须再次转义整个XML以使其成为有效的HTML.您希望在页面中显示的最终来源是:


问题是基于对textarea元素的内容模型的误解 - 验证者会立即解决问题.

ETA评论:好吧,还有什么问题?这是序列化方面的问题.剩下的就是将其解析回来,为此你必须假设用户可以创建格式良好的XML.

尝试解析非格式良好的XML,以便允许在属性值中使用"<"或"&"等错误,这是一种损失,完全违背了XML应该如何工作.如果您不能信任您的用户编写格式良好的XML,请为它们提供一个更简单的非XML接口,例如一个简单的换行符分隔的regexp字符串.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有