【问题标题】:How to filter XmlNode?如何过滤 XmlNode?
【发布时间】:2013-12-16 07:46:20
【问题描述】:

我正在过滤 XmlNode.innerXML 中的 xml 节点,我得到了带有 xml 元素列表的 innerXML,如下所示:

<runQueryRecord><id>128</id><caption_id>32</caption_id><featurename>DVC.CANYON-NIGHTFALL</featurename><featureprice>0</featureprice><sorting>0</sorting><partnumber></partnumber><imagepath>assets/images/DVC/NIGHTFALL.jpg</imagepath><selected>0</selected><hidden>0</hidden><optcatalogid>0</optcatalogid><advopt_code></advopt_code><qty>1</qty><featurecost>0</featurecost></runQueryRecord>

现在我想搜索在 featurename 标记中具有特定值的节点。然后我必须将其转换为 json。

我的整个代码是:

XmlNode node = advanceAPI.runQuery("----", "--------",sqlquery);
var sb = new StringBuilder();
            sb.Append("APIResponse(");
            sb.Append(JsonConvert.SerializeObject(node,Newtonsoft.Json.Formatting.Indented));
            sb.Append(");");

我尝试了以下方法:

node = node.SelectNodes("//runQueryRecord[contains(featurename,'"+ Request.QueryString["strOption"] +"')]");

但这给了我 XMLNodeList,它不是将它转换为 JSON 以用于 Newtonsoft.Json 的正确格式。

请给出一些关于过滤 XMLNode 节点和获取条件匹配节点的想法。

提前致谢。

【问题讨论】:

    标签: .net xml parsing xml-parsing json.net


    【解决方案1】:

    首先,如果您只需要一个 XmlNode 而不是 XmlNodeList,则可以使用 SelectSingleNode 而不是 SelectNodes。这将给出与 XPath 查询匹配的第一个节点。

    其次,如果要将XML转换为JSON,则需要使用JsonConvert.SerializeXmlNode而不是JsonConvert.SerializeObject

    这是一个演示:

    class Program
    {
        static void Main(string[] args)
        {
            string xml = @"
                <runQueryRecord>
                    <id>128</id>
                    <caption_id>32</caption_id>
                    <featurename>DVC.CANYON-NIGHTFALL</featurename>
                    <featureprice>0</featureprice>
                    <sorting>0</sorting>
                    <partnumber></partnumber>
                    <imagepath>assets/images/DVC/NIGHTFALL.jpg</imagepath>
                    <selected>0</selected>
                    <hidden>0</hidden>
                    <optcatalogid>0</optcatalogid>
                    <advopt_code></advopt_code>
                    <qty>1</qty>
                    <featurecost>0</featurecost>
                </runQueryRecord>";
    
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
    
            string qsOption = "DVC.CANYON-NIGHTFALL";
            XmlNode node = doc.SelectSingleNode("//runQueryRecord[contains(featurename,'" + qsOption + "')]");
            string json = JsonConvert.SerializeXmlNode(doc, Formatting.Indented);
    
            Console.WriteLine("APIResponse(" + json + ");");
        }
    }
    

    输出:

    APIResponse({
      "runQueryRecord": {
        "id": "128",
        "caption_id": "32",
        "featurename": "DVC.CANYON-NIGHTFALL",
        "featureprice": "0",
        "sorting": "0",
        "partnumber": null,
        "imagepath": "assets/images/DVC/NIGHTFALL.jpg",
        "selected": "0",
        "hidden": "0",
        "optcatalogid": "0",
        "advopt_code": null,
        "qty": "1",
        "featurecost": "0"
      }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多