【解決方法】XML ノードを取得しない

[ad_1]

やあ 、
親ノードなしで xml ノードを選択しようとしていますが、値を取得できません。 誰か助けてください。

私が試したこと:

XmlNodeList nodes = root.SelectNodes("//sdnDetails");
        foreach (XmlNode node in nodes)
        {
            XmlNode fnamexml = node.SelectSingleNode("firstName");
            if(fnamexml != null)
            {
                string a = fnamexml.InnerText;
            }
        }

xml:

<?xml version="1.0" standalone="yes"?><sdnList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/sdnList.xsd">
<publshInformation>
<Publish_Date>12/15/2022</Publish_Date>
<Record_Count>447</Record_Count></publshInformation>
<sdnDetails>
<uid>9639</uid>
<firstName>Ismail Abdul Salah</firstName>
<lastName>HANIYA</lastName>
<sdnType>Individual</sdnType>
</sdnDetails>
</sdnList>

解決策 1

XML ドキュメントのデフォルトの名前空間は "http://tempuri.org/sdnList.xsd".

残念ながら、 System.Xml クラスはデフォルトの名前空間をサポートしていません。 代わりに、 XmlNamespaceManager デフォルトの名前空間のエイリアスを定義し、それをクエリで使用するには:

C#
XmlNamespaceManager nsmgr = new XmlNamespaceManager(root.OwnerDocument.NameTable);
nsmgr.AddNamespace("d", root.NamespaceURI);

XmlNodeList nodes = root.SelectNodes("//d:sdnDetails", nsmgr);
foreach (XmlNode node in nodes)
{
    XmlNode fnamexml = node.SelectSingleNode("d:firstName", nsmgr);
    ...
}

少し簡単です XML へのリンク[^]:

C#
XNamespace ns = root.Name.Namespace;
IEnumerable<XElement> nodes = root.Descendants(ns + "sdnDetails");
foreach (XElement node in nodes)
{
    XElement fnamexml = node.Element(ns + "firstName");
    ...
}

[ad_2]

コメント

タイトルとURLをコピーしました