如何用条件读取xml中的节点

时间:2015-10-12 08:40:00

标签: c# xml

这是我的XML文件

<problem>
    <sct:fsn>Myocardial infarction (disorder)</sct:fsn>
    <sct:code>22298006</sct:code>
    <sct:description>Heart attack</sct:description>
    <sct:description>Infarction of heart</sct:description>
    <sct:description>MI - Myocardial infarction</sct:description>
    <sct:description>Myocardial infarct</sct:description>
    <sct:description>Cardiac infarction</sct:description>
    <sct:description>Myocardial infarction</sct:description>
</problem>

如何选择Code和fsn?如果我有描述。 请帮助谢谢

1 个答案:

答案 0 :(得分:0)

你遗漏了一个重要的部分:命名空间声明。

在原始XML文件中,您可能有一个或多个属性,如xmlns:xxx。这些属性具有特殊含义,因为允许在同一文件中使用两个不同的XML 词汇表

要查找具有命名空间的元素(请注意xxx:部分;在您的情况下,它是sct:),您需要使用XmlNamespaceManager类,就像在示例中一样下面。

警告:属性值(在本例中为“示例”)必须与AddNamespace方法中使用的相同,逐字。

var xml = new XmlDocument();
    xml.LoadXml(@"
        <problem xmlns:sct='example'>
            <sct:fsn>Myocardial infarction (disorder)</sct:fsn>
            <sct:code>22298006</sct:code>
            <sct:description>Heart attack</sct:description>
            <sct:description>Infarction of heart</sct:description>
            <sct:description>MI - Myocardial infarction</sct:description>
            <sct:description>Myocardial infarct</sct:description>
            <sct:description>Cardiac infarction</sct:description>
            <sct:description>Myocardial infarction</sct:description>
        </problem>");

var xmlns = new XmlNamespaceManager(xml.NameTable);
    xmlns.AddNamespace("sct", "example");
   // same as     xmlns:sct=  'example'

// This is important: ---------------------------------V
Console.WriteLine(xml.SelectSingleNode("//sct:code", xmlns).InnerText);