簡體   English   中英

如何從XML中的屬性檢索值?

[英]How to retrieve value from attribute in XML?

我有的:

<?xml version="1.0" encoding="Unicode" standalone="yes"?>
<FiberItems>
    <Fiber China="1a" England="1b"  Japan="1c"  France="1d" Korea="1e"/>
    <Fiber China="2a" England="2b"  Japan="2c"  France="2d" Korea="2e"/>
</FiberItems>

我想要的是:
1.將“ China”的所有值檢索到一個字符串數組中。
2.如果中國的值為“ 1a”,則檢索其余屬性(1b,1c,1d,1e)的所有值。

我所做的:
1.我為目的1編寫代碼,但是> _ <

        XDocument doc = XDocument.Load("/FiberItems.xml");
        IEnumerable<string> query = from fiber in doc.Root.Elements("Fiber")
                                    select (string)fiber.Attribute("China");

        string[] myString = new string[3];
        for (int i = 0; i < 3; i++)
        {
            foreach (string item in query)
            {
                myString[i] = (string)item;
            }
        }

2.出於目的2,尚不知道> _ <

需要幫助

因此,您的要求是,如果屬性China值為“ 1a”,則獲取該節點的所有屬性值。 我認為應該可以

XDocument doc = XDocument.Load("/FiberItems.xml");
IEnumerable<string> query = from fiber in doc.Root.Elements("Fiber")
                            //condition 1
                            where (string)fiber.Attribute("China") == "1a"
                            //condition 2 : Select all except china attribute
                            select fiber.Attributes().Where(a => a.Name !="China");

您可以使用以下代碼:

        XDocument root = XDocument.Load("/FiberItems.xml");
        var attributesChina = root.Elements("FiberItems").Elements("Fiber").Attributes("China");
        // attributesChina will contain all the values of china
        foreach (XAttribute china in attributesChina)
        {
            string value = china.value;
        }

您可能不應該使用數組來收集數據,但是當您這樣做時:

    string[] myString = new string[3];
  //  for (int i = 0; i < 3; i++)
  //  {
        int i = 0;
        foreach (string item in query)
        {
            myString[i] = (string)item;
            i += 1;
        }
  //  }

您正在進行3x3輪,僅需要3輪。

//Load XML element
XElement root = XElement.Parse(File.ReadAllText("/FiberItems.xml")); 

//All china attributes (retrieves 1a,2a)
var chinaAttributes= root.Elements().Attributes("China");

//load all rest attributes for china = 1a, loads 1b,1c,1d,1e
var chinaOneARestAttributes = root.Elements().Where(a=>a.Attribute("China")!=null && a.Attribute("China").Value=="1a").Attributes().Select(x=>x.Value).Where(x=>!String.Equals(x,"1a"));

空引用異常已更新。 利用我之前嘗試的數據,我確保所有元素都存在Attribute China。

使用LINQ to XML:

var xmlStr = @"<?xml version=""1.0"" encoding=""Unicode"" standalone=""yes""?>
<FiberItems>
    <Fiber China=""1a"" England=""1b""  Japan=""1c""  France=""1d"" Korea=""1e""/>
    <Fiber China=""2a"" England=""2b""  Japan=""2c""  France=""2d"" Korea=""2e""/>
</FiberItems>";
var doc = XDocument.Parse(xmlStr);
var query =
    from fiber in doc.Descendants("Fiber")
    where (string)fiber.Attribute("China") == "1a"
    select String.Join(", ",
        (from attr in fiber.Attributes()
         where attr.Name != "China"
         select (string)attr).ToArray());

這將為每個包含China屬性值為1a Fiber元素返回一系列其他屬性值。

簽出System.Xml.Linq。

這是獲取一個元素的所有屬性的列表的示例。

var xml = @"<?xml version=""1.0"" encoding=""Unicode"" standalone=""yes""?>
<FiberItems>
<Fiber China=""1a"" England=""1b""  Japan=""1c""  France=""1d"" Korea=""1e""/>
<Fiber China=""2a"" England=""2b""  Japan=""2c""  France=""2d"" Korea=""2e""/>
</FiberItems>";

XDocument doc = XDocument.Parse(xml);
XElement ele = doc.Root.Element("Fiber");
var att = ele.Attributes();

在XPath中:

/FiberItems/Fiber[@China='1a']/@*

使用China ='1a'獲得纖維元素的所有屬性,然后

/FiberItems/Fiber[@China='1a']/@*[local-name()!='China']

為您提供相同的屬性序列(不包括China屬性)。

暫無
暫無

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

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