繁体   English   中英

从 c# 中的 Xml 字符串中获取元素

[英]Get element from a Xml string in c#

我在一个字符串中有一个 xml 文档我想读取标签的值,它在完整的 XML 中有多个引用,所以我无法用其他方法唯一地读取它。 我试过这段代码:

            XDocument cdafile = XDocument.Parse(cXml)//The Xml code;

            var myElement = cdafile.Elements("recordTarget").Elements("patientRole").Elements("patient").Elements("name").Elements("given");

但该值始终为空。 也许我应该进入命名空间urn:hl7-org:v3,但我不知道怎么做。

这是 xml 代码。

<?xml version="1.0" encoding="UTF-8"?>
<ClinicalDocument xsi:schemaLocation="urn:hl7-org:v3 CDA.xsd" 
xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <recordTarget>
    <patientRole classCode="PAT">
      <id root="2.16.840.1.113883.2.9.4.3.2" extension="DC234RT566Y7" 
assigningAuthorityName="LONDON" />
      <addr use="HP">
        <houseNumber>5</houseNumber>
        <streetName>MY STREET NAME</streetName>
        <city>LONDON</city>
        <postalCode>12345</postalCode>
        <county>GB</county>
      </addr>
      <patient>
         <name>
          <given>NAME</given>
          <family>SURNAME</family>
        </name>
        <administrativeGenderCode codeSystem="2.16.840.1.113883.5.1" code="F" displayName="F" />
        <birthTime value="20030215" />
        <birthplace>
          <place>
            <addr>
              <county>GB</county>
              <city>LONDON</city>
              <postalCode />
            </addr>
          </place>
        </birthplace>
      </patient>
    </patientRole>
  </recordTarget>
  <author>
    <time value="20200429110507" />
    <assignedAuthor>
      <id root="2.16.840.1.113883.2.9.4.3.2" extension="CF1234567890" 
assigningAuthorityName="NYC" />
  <id root="2.16.840.1.113883.2.9.2.160.4.2" extension="414681" 
assigningAuthorityName="LONDON" />
      <assignedPerson>
        <name>
          <prefix>DR.</prefix>
          <given>DRNAME</given>
          <family>DRSURNAME</family>
        </name>
      </assignedPerson>
    </assignedAuthor>
  </author>
</ClinicalDocument>

您可以使用这个小控制台应用程序解析特定的 xml 文档:

using System;
using System.Linq;
using System.Xml.Linq;

namespace TestXml
{
   class Program
   {
      static void Main(string[] args)
      {
         if (args.Length < 1) Console.WriteLine("You must enter a filename");
         try
         {
            XDocument doc = XDocument.Load(args[0]);
            var recTgts = doc.Root.Elements().Where(elm => elm.Name.LocalName == "recordTarget");
            foreach(XElement recTgt in recTgts)
            {
               Console.WriteLine("Record Target");
               Console.WriteLine("-------------");
               var patientRoles = recTgt.Elements().Where(elm => elm.Name.LocalName == "patientRole");
               foreach (XElement patientRole in patientRoles)
               {
                  Console.WriteLine("Patient role " + patientRole.Attribute("classCode").Value);
                  Console.WriteLine("----------------");
                  var patients = patientRole.Elements().Where(elm => elm.Name.LocalName == "patient");
                  foreach (XElement patient in patients)
                  {
                     XElement name = patient.Elements().First(elm => elm.Name.LocalName == "name");
                     string given = name.Elements().First(elm => elm.Name.LocalName == "given").Value;
                     string family = name.Elements().First(elm => elm.Name.LocalName == "family").Value;
                     Console.WriteLine("Patient " + given + " " + family);
                  }
               }
            }
         }
         catch (Exception ex)
         {
            Console.WriteLine("Something went wrong: " + ex.Message);
         }
      }
   }
}

您需要像这样使用 XNamespace:

XNamespace ns = "urn:hl7-org:v3";
var xml = XElement.Parse("<Z xmlns='urn:hl7-org:v3'><data>123</data></Z>");
var data = xml.Element(ns + "data");
var value = data.Value;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM