C# 读取XML数据

C# 读取XML数据

示例:

<CreateLABApplicationService msg= '123'>
    <Event>
        <RecordDatetime>2022/11/1 9:56:38</RecordDatetime>
        <Operator>0251 </Operator>
        <EventFacility>1</EventFacility>
    </Event>
    <Demography>
        <PatientID>1000168910</PatientID>
        <MedicalRecordNo>1000168910</MedicalRecordNo>
        <SSN>1</SSN>
        <PatientName>测试</PatientName>
        <Sex>2</Sex>
        <Birthday>1984/3/28 0:00:00</Birthday>
        <MaritalStatus>90</MaritalStatus>
    </Demography>
 </CreateLABApplicationService>

1、读取属性上的参数,例如:示例中的 msg的值 用Attributes[“XX”].Value;

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("XML数据");
XmlElement element = xmlDocument.DocumentElement;
element.Attributes["msg"].Value; 

2、读取Event节点的数据,用SelectSingleNode(参数1) 参数1:节点的路径

XmlNode Event = element.SelectSingleNode("//Event"); 
// 如果有多个Event节点  可以用SelectNodes()  参数同样是节点的路径
XmlNodeList Events = element.SelectNodes("//Event"); 

3、读取Event的子节点Operator的值,用.InnerText

Event.SelectSingleNode("//Operator").InnerText

其它一些常用代码
1、用DataTable创建XML格式代码

public static string CreateXmlByDataTable(DataTable dt)
{
    if (dt == null)
    {
        return "";
    }

    StringBuilder builder = new StringBuilder();

    // 改成按dt构造xml
    foreach (DataRow dr in dt.Rows)
    {
        foreach (DataColumn column in dt.Columns)
        {
            builder.Append($"\t<{column}>{dr[column].ToString()}</{column}>\n");
        }
    }
    return builder.ToString();
}

注意:
1、当有多个相同节点时,如果是用.SelectNodes()取值,有可能会取到重复的数据,可以用XmlNode.Clone()先把数据保存到一个新的Node里面,再从新的Node里面找
示例:

<CreateLABApplicationService msg= '123'>
    <Event>
        <RecordDatetime>2022/11/1 9:56:38</RecordDatetime>
        <Operator>0251 </Operator>
        <Operator>0252 </Operator>
        <EventFacility>1</EventFacility>
    </Event>
    <Event>
        <RecordDatetime>2022/11/1 9:56:38</RecordDatetime>
        <Operator>0253 </Operator>
        <Operator>0254 </Operator>
        <EventFacility>1</EventFacility>
    </Event>
 </CreateLABApplicationService>

如果要取两个Event下面的Operator节点的值。我们可能会用下面的代码:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml("XML数据");
XmlElement element = xmlDocument.DocumentElement;
XmlNodeList lstEvent= element.SelectNodes("//Event"); 
foreach (XmlNode Event in lstEvent)
{
    XmlNodeList lstOperator = Event.SelectNodes("//Operator");
    // 这里获取到的lstOperator的数量其实已经不对了,本来应该是2,但找到的却是4,
    // 因为它是按照路径来找的。
    // 解决办法:先把这个节点复制出来,在新的这个里面找
     XmlNode newEvent = Event.Clone();
     XmlNodeList lstOperator = newEvent .SelectNodes("//Operator");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值