C# 在C语言中使用XML请求#

C# 在C语言中使用XML请求#,c#,xml,request,C#,Xml,Request,我不熟悉XML;我需要对C#中的XML文件执行此请求: XXX 我的XML文件的一个示例: <?xml version="1.0" encoding="UTF-8"?> <ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNam espaceSchemaLocation="https://xxxxxxxxxxxx"> <resp

我不熟悉XML;我需要对C#中的XML文件执行此请求:

XXX
我的XML文件的一个示例:

    <?xml version="1.0" encoding="UTF-8"?>
    <ServiceResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNam
    espaceSchemaLocation="https://xxxxxxxxxxxx">
      <responseCode>SUCCESS</responseCode>
      <count>xxx</count>
      <hasMoreRecords>true</hasMoreRecords>
      <lastId>xxxxxxxx</lastId>
      <data>
 <name>XXXX</name>
      <parentTagId>xxxxxxxx</parentTagId>
      <created>xxxxxxxx</created>
      <modified>xxxxxxxx</modified>
      <ruleText>xxxxxxxx</ruleText>
      <ruleType>xxxxxxxx</ruleType>
      <srcAssetGroupId>xxxxxxxx</srcAssetGroupId>
      <srcBusinessUnitId>xxxxxxxx</srcBusinessUnitId>
    </Tag>
  </data>

成功
xxx
符合事实的
xxxxxxxx
XXXX
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx

我怎样才能继续

我假设您想要获取包含特定名称的元素的元素(在本例中为“name”)

首先,您需要解析请求XML,以了解从主XML中获得什么

要从主XML获取数据,可以使用表达式:

using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Xml;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string x = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<ServiceResponse xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:noNamespaceSchemaLocation=""https://xxxxxxxxxxxx"">
    <responseCode>SUCCESS</responseCode>
    <count>xxx</count>
    <hasMoreRecords>true</hasMoreRecords>
    <lastId>xxxxxxxx</lastId>
    <data>
        <name>XXXX</name>
        <parentTagId>xxxxxxxx</parentTagId>
        <created>xxxxxxxx</created>
        <modified>xxxxxxxx</modified>
        <ruleText>xxxxxxxx</ruleText>
        <ruleType>xxxxxxxx</ruleType>
        <srcAssetGroupId>xxxxxxxx</srcAssetGroupId>
        <srcBusinessUnitId>xxxxxxxx</srcBusinessUnitId>
    </data>
    <data>
        <name>YYYY</name>
        <parentTagId>pti</parentTagId>
        <created>c</created>
        <modified>m</modified>
        <ruleText>rt</ruleText>
        <ruleType>rty</ruleType>
        <srcAssetGroupId>a</srcAssetGroupId>
        <srcBusinessUnitId>b</srcBusinessUnitId>
    </data>
</ServiceResponse>";

            string q = @"<?xml version=""1.0"" encoding=""UTF-8"" ?><ServiceRequest><filters><Criteria field=""name"" operator=""CONTAINS"">XXX</Criteria></filters></ServiceRequest>";
            XDocument qd = XDocument.Parse(q);

            List<string> fieldNames = new List<string>();
            List<string> operators = new List<string>();
            List<string> values = new List<string>();

            foreach(XElement criterion in qd.Descendants("Criteria"))
            {
                fieldNames.Add(criterion.Attribute("field").Value);
                operators.Add(criterion.Attribute("operator").Value);
                values.Add(criterion.Value);
            }

            //TODO: write code to cope with anything other than exactly 1 criterion.
            //TODO: write code for operators other than "contains".

            // Construct an XPath query expression:
            string xq = $"//{fieldNames[0]}[contains(text(), '{values[0]}')]/..";

            XmlDocument xd = new XmlDocument();
            xd.LoadXml(x);

            foreach (XmlNode n in xd.SelectNodes(xq))
            {
                Console.WriteLine(n.InnerXml);
            }

            Console.ReadLine();

        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Xml.Linq;
使用System.Xml;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串x=@”
成功
xxx
符合事实的
xxxxxxxx
XXXX
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
YYYY
pti
C
M
rt
蒂
A.
B
";
字符串q=@“XXX”;
XDocument qd=XDocument.Parse(q);
列表字段名=新列表();
列表运算符=新列表();
列表值=新列表();
foreach(qd.substands中的XElement标准(“标准”))
{
fieldNames.Add(criteria.Attribute(“field”).Value);
运算符.Add(标准.属性(“运算符”).值);
添加(标准值);
}
//TODO:编写代码以处理除1个标准之外的任何问题。
//TODO:为“contains”以外的运算符编写代码。
//构造XPath查询表达式:
字符串xq=$“/{fieldNames[0]}[包含(text(),'{values[0]}')]/..”;
XmlDocument xd=新的XmlDocument();
LoadXml(x);
foreach(xd.SelectNodes(xq)中的XmlNode)
{
WriteLine(n.InnerXml);
}
Console.ReadLine();
}
}
}
产出:

<name>XXXX</name><parentTagId>xxxxxxxx</parentTagId><created>xxxxxxxx</created><modified>xxxxxxxx</modified><ruleText>xxxxxxxx</ruleText><ruleType>xxxxxxxx</ruleType><srcAssetGroupId>xxxxxxxx</srcAssetGroupId><srcBusinessUnitId>xxxxxxxx</srcBusinessUnitId>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

1)是否可以有多个标准?2) 请编辑您的问题,以包含包含该请求结果的最小有效XML。1)我只需要一些名称包含特定字符的项目。2) 完成了,正是我想要的!谢谢你!
<name>XXXX</name><parentTagId>xxxxxxxx</parentTagId><created>xxxxxxxx</created><modified>xxxxxxxx</modified><ruleText>xxxxxxxx</ruleText><ruleType>xxxxxxxx</ruleType><srcAssetGroupId>xxxxxxxx</srcAssetGroupId><srcBusinessUnitId>xxxxxxxx</srcBusinessUnitId>