想法:

最近想用REST的方式去修改一个远端的xml文件,于是自己写了个Handler

设计:

用现成的XPath,和GET,POST,PUT,DELETE这4个http方法作为动作,达到直接读写xml

限制:

在一些浏览器中“//”和“..”会被直接翻译,因此需要使用这些的时候,不得不使用XPath的完整形式

PUT方法不能新建不存在的节点,因为XPath中不包含足够的定位信息

POST方法只能以节点为单位,且只能添加在最后

使用MVC4

代码:

https://github.com/vwxyzh/XmlRestHandler

使用:

只需要注册Handler

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "xml",
routeTemplate: "xml/{*path}",
defaults: new { path = "/" },
constraints: null,
handler: new XmlRestHandler("App_Data/yours.xml"));

然后,就可以使用了
例子:

首先Xml:

<?xml version="1.0" encoding="utf-8"?>
<root>
<users>
<user name="abc" age="">
<roles>
<role ref="admin" />
</roles>
</user>
<user name="def" age="">
<roles>
<role ref="reader" />
</roles>
</user>
</users>
<roles>
<role name="admin" />
<role name="reader" />
</roles>
</root>

1.找出所有角色有admin的用户的名字:

GET http://hostname/virtualpath/xml/root/users/user[roles/role/@ref="admin"]/@name

返回:

name="abc"

2.把角色reader改名成normaluser:

PUT http://hostname/virtualpath/xml/(descendant::role[@name="reader"]/@name|descendant::role[@ref="reader"]/@ref)

normaluser

3.需要添加一个角色monitor:

POST http://hostname/virtualpath/xml/root/roles

<role name="monitor" />

4.删除所有用户的age属性:

DELETE http://hostname/virtualpath/xml/descendant::user/@age

使用rest方式修改服务端xml文件的更多相关文章

  1. 源码详解openfire保存消息记录_修改服务端方式

    实现openfire消息记录通常有两种方式,修改服务端和添加消息记录插件. 今天,简单的说明一下修改服务端方式实现消息记录保存功能. 实现思路 修改前: 默认的,openfire只提供保存离线记录至o ...

  2. 通过Java WebService接口从服务端下载文件

    一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...

  3. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  4. ftpget 从Windows FTP服务端获取文件

    /********************************************************************************* * ftpget 从Windows ...

  5. 修改目的端trail文件的最大大小--转载

    本文为原创,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/38346435 修改目的端trail文件的最大大小. 本文产生的背景: 在 ...

  6. java实现从服务端下载文件

    这边用一个简单的servlet实现java从服务端下载文件的操作 写一个servlet: <servlet> <servlet-name>DownloadServlet< ...

  7. 从服务端下载文件到本地windows

    之前常使用本地ubuntu和远程的centos服务器或者是本地mac和远程centos服务器通过命令scp或者nc来进行文件的传输. 现在用的是windows系统,欲将服务器的某文件load到本地. ...

  8. 【2017-05-30】WebForm文件上传。从服务端删除文件

    用 FileUpload控件进行上传文件. <asp:FileUpload ID="FileUpload1"  runat="server" /> ...

  9. WEB服务端安全---文件上传漏洞

    1.简述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力.这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业 ...

随机推荐

  1. Oracle安装前用户信息设置

    如果是重复安装,首先需要清除已经存在的软件安装记录: rm -fr /usr/local/bin/*oraenv rm -fr /usr/local/bin/dbhome rm -fr /usr/tm ...

  2. Linux IPC System V 消息队列

    模型 #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> ftok() //获取key ...

  3. [转][业界动态] 5G为何采纳华为力挺的Polar码?一个通信工程师的大实话

    本文转自:http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=3264791 P ...

  4. sql中in和exists效率问题 转自百度知道

    in和existsin 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询 ...

  5. c语言结构体小知识

    引自:http://c.biancheng.net/cpp/html/88.html 结构体在内存中是连续存储的 struct stu{ char *name; //姓名 int num; //学号 ...

  6. HDU1502/Luogu1352/UVa1220 party[树形DP]

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  7. Vector3 *2 ,ToString()自动四舍五入

    还以为出错了,仔细看发现ToString()自动四舍五入 Vector3 forward = Camera.main.transform.forward; Debug.Log("forwar ...

  8. 虚拟机VMware怎么完全卸载干净

    虚拟机VMware怎么完全卸载干净 听语音 | 浏览:19929 | 更新:2014-12-21 10:28 | 标签:虚拟机 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师傅高质屏和好师傅 ...

  9. 在Ubuntu14.04下安装vsftp服务器

    猜想在Ubuntu下搭建ftp服务器来实现windows和ubuntu下文件互传是一件很简单的事儿,但是在网上找了好几篇文章都不行,故自己在这里总结一下方法. 首先安装vsftp服务器 sudo ap ...

  10. 为什么做前端要做好SEO

    我就挑干货说啦SEO可能听起来很高大上,其实翻译成中文就是"搜索引擎优化",它只是通过一定的方法在网站内外发布文章.交换连接等,最终达到某个关键词在搜索引擎上获得好的排名. 我有幸 ...