0

私が持っているもの:

<?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.「中国」のすべての値を文字列配列に取得します。
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 については、まだわかりません >_<

助けが必要

4

7 に答える 7

0

System.Xml.Linqを確認してください。

これは、1つの要素のすべての属性のリストを取得する例です。

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();
于 2012-05-15T15:48:52.293 に答える
0

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());

これは、値を持つ属性をFiber含む各要素の他の属性値のシーケンスを返します。China1a

于 2012-05-15T15:48:13.987 に答える
0

したがって、中国の属性値が「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");
于 2012-05-15T13:32:00.560 に答える
0

次のコードを使用できます。

        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;
        }
于 2012-05-15T13:32:46.020 に答える
0

XPath では:

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

China='1a' を持つファイバー要素のすべての属性を取得し、

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

中国属性を除いて、同じ一連の属性を取得します。

于 2012-05-15T16:02:36.940 に答える
0
//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"));

Null 参照例外の更新。以前に試したデータを使用して、属性 China がすべての要素に存在することを確認しました。

于 2012-05-15T14:28:54.510 に答える
0

おそらく配列を使用してデータを収集するべきではありませんが、使用する場合は次のようになります。

    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;
        }
  //  }

3 ラウンドだけが必要な 3x3 ラウンドを実行しています。

于 2012-05-15T13:41:49.200 に答える