将XML转换为格式化的纯文本问题

时间:2019-04-09 14:39:48

标签: c# xml

我有以下XML,我希望将内容转换为以下格式的内容。

患者编号:123455,IdScheme:测试...。

<?xml version="1.0"?>
<gls:TheDocument xmlns:pbr="http://www.something.com" 
xmlns:gls="http://www.testsomething.com" 
xmlns:cnr="http://www.organisation.com" 
xmlns:h="http://www.w3.org/1999/xhtml" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="2.8">
 <gls:PatientDem>
        <cnr:PatientId>
            <cnr:IdValue>123455</cnr:IdValue>
            <cnr:IdScheme>TEST</cnr:IdScheme>
            <cnr:IdType>PRN</cnr:IdType>
        </cnr:PatientId>
        <cnr:PatientName>
            <cnr:Name>
                <cnr:Title>Mr</cnr:Title>
                <cnr:GivenName>Joe</cnr:GivenName>
                <cnr:FamilyName>Wood</cnr:FamilyName>
            </cnr:Name>
            <cnr:NameType>Current Name</cnr:NameType>
        </cnr:PatientName>
        <cnr:PatientAddress>
            <cnr:Address>
                <cnr:AddressLine>57 High Street</cnr:AddressLine>
                <cnr:AddressLine>London</cnr:AddressLine>
            </cnr:Address>
            <cnr:PostCode>WC1E 7HU</cnr:PostCode>
            <cnr:AddressType>Current Residence</cnr:AddressType>
        </cnr:PatientAddress>
        <cnr:DateOfBirth>1969-11-02</cnr:DateOfBirth>
        <cnr:Sex>M</cnr:Sex>
    </gls:PatientDem>
    <pbr:PatientAdminRef>
            <pbr:Referrer>
              <pbr:RefGP>
                <cnr:GpcpName>
                  <cnr:FullName>DR SMITH</cnr:FullName>
                </cnr:GpcpName>
                <cnr:TheOrganisation>
                  <cnr:OrganisationId>
                    <cnr:IdValue>52522</cnr:IdValue>
                    <cnr:IdScheme>PracticeID</cnr:IdScheme>
                    <cnr:IdType>Healthcare Organisation</cnr:IdType>
                  </cnr:OrganisationId>
                  <cnr:OrganisationName>National Health 
                  Service</cnr:OrganisationName>
                  <cnr:OrganisationAddress>
                    <cnr:TheAddress>
                      <cnr:AddressLine1>Centre House</cnr:AddressLine1>
                      <cnr:AddressLine2>799 Chichester 
                         Street</cnr:AddressLine2>
                      <cnr:AddressLine3>London</cnr:AddressLine3>
                    </cnr:TheAddress>
                    <cnr:AddressType>Practice Address</cnr:AddressType>
                  </cnr:OrganisationAddress>
                  <cnr:OrganisationTelecom>
                    <cnr:TelephoneNumber>016190542350</cnr:TelephoneNumber>
                    <cnr:TeleType>Voice</cnr:TeleType>
                     </cnr:OrganisationTelecom>
                </cnr:TheOrganisation>
              </pbr:RefGP>
            </pbr:Referrer>
         </pbr:PatientAdminRef>
          </gls:TheDocument>

那么有可能这样做吗?我可以尝试这样做,但是我知道我做错了一个事实,因为它无法产生我想要的结果,因此任何帮助将不胜感激:

C#代码

XDocument doc = XDocument.Parse(xml);
XElement root = doc.Root;
XNamespace glsNs = root.GetNamespaceOfPrefix("gls");
XNamespace cnrNS = root.GetNamespaceOfPrefix("cnr");
XNamespace pbrNS = root.GetNamespaceOfPrefix("pbr");

var output = new StringBuilder();
foreach (var result in doc.Descendants(gls + "PatientDem").Select(x => new {

  Key = (string)x.Name.LocalName,
  Value = x.Value
 }))
 {
  output.AppendLine($"{result.key} : {result.value}");
}

1 个答案:

答案 0 :(得分:0)

尝试以下操作:

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

namespace ConsoleApplication108
{
    class Program
    {

        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);
            XElement root = doc.Root;

            XNamespace cnrNs = root.GetNamespaceOfPrefix("cnr");

            var results = doc.Descendants(cnrNs + "PatientId").Select(x => new {
                           value = (string)x.Element(cnrNs + "IdValue"),
                           scheme = (string)x.Element(cnrNs + "IdScheme")
            }).ToList();

        }
    }
}