如何从root外部的xml请求中读取注释

时间:2017-05-04 10:51:24

标签: xml asp.net-web-api xml-parsing linq-to-xml

对于以下示例,在.net web api控制器上解析xml请求中的注释的好方法

<?xml version="1.0"?>
<Objects>
  <GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>
    <info job="SAVE" person="Joe" />    
    <info job="SAVE" person="Sally" />       
  </GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>
  <GUID-bf2401c0-ef5e-4d20-9d20-a583284112>
    <info job="SAVE" person="John" />    
    <info job="SAVE" person="Julie" />       
  </GUID-bf2401c0-ef5e-4d20-9d20-a5844113284112>
</Objects>
 <!--Comment about something-->

在输入流上使用正则表达式是唯一的选择吗?

2 个答案:

答案 0 :(得分:1)

在使用LinqToXml的C#中,您可以获得如下评论:

__openerp__.py

请注意,您必须使用 depends : ['stock',.....]

如果您使用var xml = XDocument.Load("test.xml"); var comments = xml.DescendantNodes().OfType<XComment>(); foreach (var comment in comments) Console.WriteLine(comment.Value); ,它将仅从文档的根元素接收数据。

如果您只想在根元素后面获得注释,请使用以下代码:

XDocument

答案 1 :(得分:0)

我尝试使用xpath / comment()使用以下代码访问comment节点。我能够成功打印出注释节点。我认为任何正常运行的xml lib也应该做同样的事情。

public static void main(String [] args)抛出VTDException {

    String s = "<?xml version=\"1.0\"?>"+
    "<Objects>"+
      "<GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>"+
        "<info job=\"SAVE\" person=\"Joe\" /> " + 
        "<info job=\"SAVE\" person=\"Sally\" />   " +   
      "</GUID-bf2401c0-ef5e-4d20-9d20-a2451a199362>"+
      "<GUID-bf2401c0-ef5e-4d20-9d20-a583284112>"+
        "<info job=\"SAVE\" person=\"John\" />  " + 
        "<info job=\"SAVE\" person=\"Julie\" /> " +    
      "</GUID-bf2401c0-ef5e-4d20-9d20-a583284112>"+
    "</Objects>"+
     "<!--Comment about something-->";
    VTDGen vg = new VTDGen();
    vg.setDoc(s.getBytes());
    vg.parse(false);
    VTDNav vn = vg.getNav();
    AutoPilot ap = new AutoPilot(vn);
    ap.selectXPath("/comment()");

    int i=0;
    while((i=ap.evalXPath())!=-1){
        System.out.println("---->"+vn.toString(i));
    }