簡體   English   中英

XML節點名稱和屬性不可用

[英]XML node name and attributes are not available

我具有以下XML結構:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<values>
    <bool key="Chapter_1.Boolean1.value">true</bool>
    <string key="Chapter_1.Text1.value">abc</string>
    <string key="Chapter_1.Text2.value">Inspection done (2)</string>
    <number key="Chapter_1.Number1.value">128</number>
    <number key="Chapter_1.Number2.value">34539718</number>
    <number key="Chapter_1.Number3.value">3</number>
    <datetime key="Chapter_2.Chapter_2_1.DateTime1.value">2020-06-02T09:00:00+03:00</datetime>
    <datetime key="Chapter_2.Chapter_2_1.DateTime2.value">2016-02-05T00:00:00+02:00</datetime>
    <string key="Chapter_3.Text4.value">52</string>
    <string key="Chapter_3.Text5.value">22</string>
    <number key="Chapter_3.Number6.value">34539718</number>
</values>

和以下C#代碼:

var settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Auto;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;

using (var xmlReader = new XmlTextReader(xmlFilePath))
{
    while (xmlReader.Read())
    {
        var nodeName = xmlReader.Name;
        var attrName = xmlReader.GetAttribute("key");
    }
}

問題在於節點名稱為空,並且以下鍵沒有屬性:

  • Chapter_1.Text1.value
  • Chapter_1.Number1.value
  • Chapter_3.Text5.value

任何人都知道可能是什么問題?

使用Xml到Linq會更容易:

var xml = XDocument.Load(__PATH_TO_XML__);
var values = xml.XPathSelectElements("/values/*")
    .Select(x => new
    {
        Type = x.Name,
        Key = x.Attribute("key"),
        Value = x.Value
    });

該代碼在這里運行良好,我能夠訪問所有xml標記和屬性。

也許您很困惑,因為在每個xmlReader.Read()它僅讀取標記的一部分。 因此,要讀取鍵為“ Chapter_1.Text1.value ”的所有標簽, 首先讀取名稱為string和鍵為“ Chapter_1.Text1.value的標簽,然后讀取沒有名稱,沒有屬性但值為“”的內容。 abc” ,然后讀取名稱為string的標簽,但沒有屬性,也沒有值。

如果您也想讀取該值,請嘗試以下操作

      using (var xmlReader = new XmlTextReader(@"yourxmlfile"))
        {
            while (xmlReader.Read())
            {
                if (xmlReader.NodeType == XmlNodeType.Element)
                {

                    var nodeName = xmlReader.Name;
                    var attrName = xmlReader.GetAttribute("key");

                    Console.WriteLine(nodeName);
                    Console.WriteLine(attrName);

                }
                if (xmlReader.NodeType==XmlNodeType.Text)
                {
                    Console.WriteLine(xmlReader.Value);
                }
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM