0

次のようなルート XML があります。

<Root xmlns="http://schemas.datacontract.org/2004/07/" xmlns:t="http://www.w3.org/2001/XMLSchema-instance">
   <Element1>somevalue</Element1>
   <Data/>
<Root>    

データ要素ノードの下に、名前、年齢などの顧客関連の情報をいくつか追加する必要があります。したがって、私が期待する結果は次のとおりです。

<Root xmlns="http://schemas.datacontract.org/2004/07/" xmlns:t="http://www.w3.org/2001/XMLSchema-instance">
   <Element1>somevalue</Element1>
   <Data>
     <Name t:type="xs:string" xmlns="" xmlns:s="http://www.w3.org/2001/XMLSchema">Elvis</Name>
     <Address t:type="xs:string" xmlns="" xmlns:s="http://www.w3.org/2001/XMLSchema">Some address</Address>
   </Data>
<Root>

どうすればこれを達成できますか?C#、.net 4.0 を使用しています。

以下のコードを試してみましたが、期待した結果が得られませんでした。

string strTemplate = "<Root xmlns='http://schemas.datacontract.org/2004/07/' xmlns:t='http://www.w3.org/2001/XMLSchema-instance'><Element1>somevalue</Element1><Data/></Root>";

        XDocument doc = XDocument.Parse(strTemplate);
        XElement rootElement = doc.Root;

        XElement dataElement = null;




        foreach (XElement descendant in rootElement.Descendants())
        {
            if (descendant.Name.LocalName == "Data")
            {
                dataElement = descendant;
                break;
            }
        }


        string cusData = "<CustData><Name>Elvis</Name><Address>XYZ</Address></CustData>";
        XElement customerElements = XElement.Parse(cusData);

        if (dataElement != null)
        {
            foreach (XElement custAttributes in customerElements.Descendants())
            {
                XNamespace t = "http://www.w3.org/2001/XMLSchema-instance";
                var attribute = new XAttribute(t + "type", "xs:string");
                 var attribute1 = new XAttribute(XNamespace.Xmlns + "s", "http://www.w3.org/2001/XMLSchema");
                XElement element = new XElement(custAttributes.Name, attribute, attribute1);
                element.Value = custAttributes.Value;

                dataElement.Add(element);
            }

        }
   string strPayload = doc.ToString();

コードを実行すると、次のようになります。

<Data xmlns="http://schemas.datacontract.org/2004/07/">
  <Name t:type="xs:string" xmlns:t="http://www.w3.org/2001/XMLSchema-instance"   xmlns="">Elvis</Name>
  <Address t:type="xs:string" xmlns:t="http://www.w3.org/2001/XMLSchema-instance" xmlns="">XYZ</Address>
</Data>

どんな助けでも大歓迎です!

ありがとう、M

4

0 に答える 0