C# 在C语言中使用XML请求#
我不熟悉XML;我需要对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
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>