[英]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.